一、動態註冊–監聽網絡變化
1、繼承廣播接收器
我們要新建一個類並且繼承BroadcastReceiver,然後要求重寫onReceive()方法,當收到廣播之後就會執行此方法。比如說我們在這個方法裏監聽網絡狀態
class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//獲取連接管理器
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
//使用連接管理器獲取網絡信息
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
//判斷網絡是否可用
if (networkInfo != null && networkInfo.isAvailable()){
Log.e("NetworkChangeReceiver","當前網絡可用");
//判斷是否WiFi
NetworkInfo wifi = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (wifi != null && wifi.isConnected()){
Log.e("NetworkChangeReceiver", "onReceive: 當前網絡是WiFi");
}
//判斷是否移動數據
NetworkInfo mobile = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if (mobile != null && mobile.isConnected()){
Log.e("NetworkChangeReceiver", "onReceive: 當前網絡是數據流量");
}
}else {
Log.e("NetworkChangeReceiver","當前網絡不可用");
}
}
}
2、註冊和取消註冊廣播
我們要給繼承於廣播接收器的類進行註冊,關掉程序的時候再取消註冊。我們需要給用IntentFilter添加監聽的動作,比如說這裏是監聽android.net.conn.CONNECTIVITY_CHANGE,設置好監聽動作再註冊
public class MainActivity extends AppCompatActivity {
private NetworkChangeReceiver networkChangeReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");//添加監聽網絡改變的動作
networkChangeReceiver = new NetworkChangeReceiver();
registerReceiver(networkChangeReceiver, intentFilter);//註冊廣播
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(networkChangeReceiver);//取消註冊廣播
Log.e("MainActivity", "onDestroy: 取消註冊廣播");
}
3.添加權限
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ice.androidpractice19_normalbroadcast">
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 添加權限
<application
......
</application>
</manifest>
二、靜態註冊–APP自啓
動態註冊需要在啓動程序之後才能接收到廣播,而靜態註冊卻可以在不啓動APP的時候也能接收到廣播,比如說APP開機啓動自啓等場景。我們在上面的基礎再添加一個靜態註冊的廣播
1、繼承廣播接收器
跟上面一樣,新建一個類並且繼承BroadcastReceiver,然後重寫onReceive()方法實現開機自啓
public class AutoBootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context,"APP開機自啓",Toast.LENGTH_SHORT).show();
Intent bootIntent = new Intent(context,MainActivity.class);
bootIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(bootIntent);
}
}
2、靜態註冊廣播和添加權限
修改AndroidManifest,添加receiver標籤,並且在intent-filter標籤添加要監聽的動作,比如說這裏監聽開機完成。別忘了添加權限
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ice.androidpractice19_normalbroadcast">
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 添加權限
<application
android:allowBackup="true"
......
android:theme="@style/AppTheme">
<receiver
android:name=".AutoBootReceiver" 自己的類名
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<activity android:name=".MainActivity">
......
</activity>
</application>
</manifest>