一、我們創建一個新的android項目來進行演示廣播機制中是如何顯示網路狀態的。 package com.example.broadcasttest2; import android.app.Activity; import android.content.BroadcastReceiver; i ...
一、我們創建一個新的android項目來進行演示廣播機制中是如何顯示網路狀態的。
package com.example.broadcasttest2; 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.view.Menu; import android.view.MenuItem; import android.widget.Toast; public class MainActivity extends Activity { private IntentFilter intentFilter; private NetworkChangeReceiver networkChangeReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); intentFilter = new IntentFilter(); intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); networkChangeReceiver = new NetworkChangeReceiver(); registerReceiver(networkChangeReceiver,intentFilter); } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(networkChangeReceiver); } class NetworkChangeReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context,Intent intent) { ConnectivityManager connectionMananger = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connectionMananger.getActiveNetworkInfo(); if(networkInfo != null && networkInfo.isAvailable()) { Toast.makeText(context, "network is available", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(context, "network is unavailable", Toast.LENGTH_SHORT).show(); } } } }
(1)首先建立一個IntentFilter實例,並且接下來添加一個值“andorid.net.conn.CONNECTIVITY_CHANGE的action。為什麼要添加它呢?因為當網路狀態發生變化的時候,系統會發出一條值為上述的的消息,也就是說廣播接收器想要監聽什麼樣的廣播,這裡添加什麼值就可以。
(2)我們建立一個內部類,這個內部類繼承了android自有的廣播接收器,然後進行改寫。
裡面的一個onReceive方法,每當網路狀態發生變化的時候,這個方法都會得到執行。
創建一個ConnectionManager實例,然後調用方法,來獲取網路狀態,存入到NetworkInfo變數中去。
通過這個變數來進行判斷,有網路就顯示”網路可獲得“,沒有網路就顯示”網路不可以獲得“
(3)接下來創建一個NetworkChangeReceiver實例,然後將廣播接收器以及網路狀態實例,作為參數,傳給上述實例,加以封裝執行。
(4)最後要記得,動態註冊的廣播接收器一定要去取消註冊,這就是Destroy方法實現。
(5)打開設置進行調節網路狀態
(6)另外有一點說明,android系統為了保證應用程式中的安全性做了規定,如果程式需要去訪問一些系統的關鍵信息,必須在配置文件中聲明許可權才可以,否則,程式將會直接崩潰,比如這裡的查詢系統的網路狀態,就是需要聲明的,打開AndroidManifext.xml文件
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.broadcasttest2" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
即可完成聲明。
二、源碼:
BroadcastTest2
https://github.com/ruigege66/Android/tree/master/BroadcastTest2
2.CSDN:https://blog.csdn.net/weixin_44630050
3.博客園:https://www.cnblogs.com/ruigege0000/
4.歡迎關註微信公眾號:傅里葉變換,個人公眾號,僅用於學習交流,後臺回覆”禮包“,獲取大數據學習資料