android怎么样实现“仅在wifi环境下载”

移动开发 码拜 8年前 (2016-05-10) 1021次浏览
网上搜索了一下,相关内容太少了,想问一下一下高手,怎么样实现“仅在wifi环境下载”这个功能,感谢不尽!
解决方案

3

点击下载的时候判断当前的手机网络状态。另外,监听一个网络变换广播。在WIFI切换成3G的时候自动暂停下载。3G切换成WIFI的时候继续下载。

3

简单的就是不断判断网络状态就可以了:
1.点击下载的时候判断当前的手机网络状态。
2.注册网络变换广播,或callback。只有在wifi下才允许下载。

14

写了一个小Demo,包括获取当前网络类型,以及网络状态变化监听,你参考下:
MainActivity.java:

package com.zms.netstate;
import android.app.Activity;
import android.content.Context;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {
    private TextView textShow;
    private Button btnGet;
    public static final String CONNECTIVITY_CHANGE_ACTION = "android.net.conn.CONNECTIVITY_CHANGE";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        registerDateTransReceiver();
        textShow = (TextView) findViewById(R.id.textShow);
        btnGet = (Button) findViewById(R.id.btnGet);
        btnGet.setOnClickListener(new MyOnClickListener());
    }
    private void registerDateTransReceiver() {
        IntentFilter filter = new IntentFilter();
        filter.addAction(CONNECTIVITY_CHANGE_ACTION);
        filter.setPriority(1000);
        registerReceiver(new NetChangeReceiver(), filter);
    }
    private int getNetworkType() {
        ConnectivityManager connectMgr = (ConnectivityManager) this
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo info = connectMgr.getActiveNetworkInfo();
        if (info != null) {
            return info.getType();
        } else {
            return -1;
        }
    }
    private class MyOnClickListener implements View.OnClickListener {
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.btnGet:
                    int netType = getNetworkType();
                    if (netType == ConnectivityManager.TYPE_WIFI) {
                        textShow.setText("Wi-Fi");
                    } else if (netType == ConnectivityManager.TYPE_MOBILE) {
                        textShow.setText("Mobile");
                    } else {
                        textShow.setText("None");
                    }
                    break;
            }
        }
    }
}

NetChangeReceiver.java:

package com.zms.netstate;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.text.TextUtils;
import android.widget.Toast;
/**
 * Created by AlexZhou on 2015/4/20.
 * 15:58
 */
public class NetChangeReceiver extends BroadcastReceiver {
    public static final String CONNECTIVITY_CHANGE_ACTION = "android.net.conn.CONNECTIVITY_CHANGE";
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (TextUtils.equals(action, CONNECTIVITY_CHANGE_ACTION)) {
            Toast.makeText(context, "网络状态变化", Toast.LENGTH_SHORT).show();
        }
    }
}

AndroidManifest中要添加网络状态权限:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明android怎么样实现“仅在wifi环境下载”
喜欢 (0)
[1034331897@qq.com]
分享 (0)