【Android】Broadcast標準(無序)廣播監聽網絡WiFi或移動數據改變狀態(動態註冊)、實現APP開機自啓(靜態註冊)

一、動態註冊–監聽網絡變化

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>

傳送門

【Android】自定義廣播和有序廣播、截斷廣播

【Android】發送本地廣播

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章