失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Android通过使用系统广播监听网络状态的改变

Android通过使用系统广播监听网络状态的改变

时间:2024-05-31 15:08:36

相关推荐

Android通过使用系统广播监听网络状态的改变

Android通过使用广播监听网络状态的改变

得先添加权限

//查看网络状态<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />//网络状态改变的权限<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />

先看代码:

我们可以通过系统广播:.conn.CONNECTIVITY_CHANGE

来实现手机网络的变化

package workchange;import android.app.Activity;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import .ConnectivityManager;import workInfo;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;@Overrideprotected 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(".conn.CONNECTIVITY_CHANGE");//一样的效果intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);//一样的效果和下面*/IntentFilter intentFilter = new IntentFilter(".conn.CONNECTIVITY_CHANGE");//网络状态改变的广播networkChange = new NetworkChange();registerReceiver(networkChange, intentFilter);}class NetworkChange extends BroadcastReceiver {@Overridepublic 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 ConnectivityManagerval 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 ConnectivityManagerval 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以后获取网络状态的方法/weixin_40920751/article/details/114374799/weixin_40920751/article/details/114374799

提供源码下载:

点击下载源码

如果觉得《Android通过使用系统广播监听网络状态的改变》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。