Android通过使用广播监听网络状态的改变
得先添加权限
//查看网络状态
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
//网络状态改变的权限
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
先看代码:
我们可以通过系统广播:android.net.conn.CONNECTIVITY_CHANGE
来实现手机网络的变化
package cn.xiayiye.networkchange;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.provider.Settings;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import java.lang.reflect.Method;
public class MainActivity extends Activity implements View.OnClickListener {
private NetworkChange networkChange;
boolean isNetWork = true;//默认有网络
private TextView change;
private Button set_network;
private EditText message;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
change = (TextView) findViewById(R.id.change);
Button send_broadcast = (Button) findViewById(R.id.send_broadcast);
set_network = (Button) findViewById(R.id.set_network);
message = (EditText) findViewById(R.id.message);
change.setFocusable(true);
change.setClickable(true);
listenerNetWorkChange();
send_broadcast.setOnClickListener(this);
change.setOnClickListener(this);
set_network.setOnClickListener(MainActivity.this);
}
private void listenerNetWorkChange() {
/* IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");//一样的效果
intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);//一样的效果和下面*/
IntentFilter intentFilter = new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE");//网络状态改变的广播
networkChange = new NetworkChange();
registerReceiver(networkChange, intentFilter);
}
class NetworkChange extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();//获取网络状态
if (activeNetworkInfo != null && activeNetworkInfo.isAvailable()) {
Toast.makeText(MainActivity.this, "已连网!", Toast.LENGTH_LONG).show();
change.setText("网络已连接!");
set_network.setVisibility(View.GONE);
} else {
Toast.makeText(MainActivity.this, "已断网!", Toast.LENGTH_LONG).show();
set_network.setVisibility(View.VISIBLE);
change.setText("网络已断开!");
}
// isNetWork = !isNetWork;
}
}
}
Android10 API29以后最新方法
val broadcastReceiver = object : BroadcastReceiver() {
@SuppressLint("MissingPermission")
override fun onReceive(context: Context?, intent: Intent?) {
val connectivityManager =
context!!.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val networkCapabilities =
connectivityManager.getNetworkCapabilities(connectivityManager.activeNetwork)
when {
networkCapabilities == null -> {
Toast.makeText(context, "已断网!", Toast.LENGTH_LONG).show()
}
networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> {
Toast.makeText(context, "已连网当前使用移动网络!", Toast.LENGTH_LONG).show()
}
networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> {
Toast.makeText(context, "已连网当前使用WIFI网络!", Toast.LENGTH_LONG).show()
}
}
}
}
val broadcastReceiver = object : BroadcastReceiver() {
@SuppressLint("MissingPermission")
override fun onReceive(context: Context?, intent: Intent?) {
val connectivityManager1 = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val networkCapabilities = connectivityManager.getNetworkCapabilities(connectivityManager.activeNetwork)
if (networkCapabilities == null) {
System.out.println("请打开网络");
} else if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
System.out.println("当前使用移动网络");
} else if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
System.out.println("当前使用WIFI网络");
}
}
上面两个方法是一样的都是kotlin的写法哈,非常感谢原博主:Android29以后获取网络状态的方法https://blog.csdn.net/weixin_40920751/article/details/114374799https://blog.csdn.net/weixin_40920751/article/details/114374799
提供源码下载: