android如何实现“仅在wifi环境下载”,androidwifi
android wi-fi 网上搜索了一下,相关内容太少了,想请问一下大神,如何实现“仅在wifi环境下载”这个功能,感谢不尽!解决方案
1.点击下载的时候判断当前的手机网络状态。
2.注册网络变换广播,或者callback。只有在wifi下才允许下载。
写了一个小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;
}
}
}
}
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" />
用户评论