日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

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

發布時間:2023/12/15 Android 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android通过使用系统广播监听网络状态的改变 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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;@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("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 {@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以后獲取網絡狀態的方法https://blog.csdn.net/weixin_40920751/article/details/114374799https://blog.csdn.net/weixin_40920751/article/details/114374799

提供源碼下載:

點擊下載源碼

總結

以上是生活随笔為你收集整理的Android通过使用系统广播监听网络状态的改变的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。