Android通过使用系统广播监听网络状态的改变
生活随笔
收集整理的這篇文章主要介紹了
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通过使用系统广播监听网络状态的改变的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 英雄联盟电1是哪个区
- 下一篇: android sina oauth2.