Android開發 廣播監聽系統的各種狀態


前言

  此篇博客用於記錄系統的各種廣播狀態

廣播監聽開機

  注冊靜態廣播

        <receiver android:name=".receiver.MyReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
        </receiver>

  添加權限

   <!-- 接收開機廣播的權限,開機是很危險的行為,所以需要此權限 -->
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

  接收廣播

public class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")){
            L.e("設備開機了");
        }
    }
}

廣播監聽關機

  注冊靜態廣播

        <receiver android:name=".receiver.ShutdownReceiver">
            <intent-filter>
                <action android:name="android.intent.action.ACTION_SHUTDOWN"/>
            </intent-filter>
        </receiver>

  接收廣播

public class ShutdownReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals("android.intent.action.ACTION_SHUTDOWN")){
            L.e("設備關機了...");
        }
    }
}

網絡變化廣播

注冊

        IntentFilter networkChangeFilter = new IntentFilter();
        networkChangeFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
        NetWorkChangeReceiver netWorkChangeReceiver = new NetWorkChangeReceiver();//網絡變化廣播
        registerReceiver(netWorkChangeReceiver, networkChangeFilter);

接收

public class NetWorkChangeReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

        if (intent == null) {
            return;
        }
        String action = intent.getAction();
        if (TextUtils.isEmpty(action)) {
            return;
        }


        if (!TextUtils.equals(action, ConnectivityManager.CONNECTIVITY_ACTION)) {
            return;
        }
        // 監聽網絡連接,包括wifi和移動數據的打開和關閉,以及連接上可用的連接都會接到監聽

        Log.i("hcz", " CONNECTIVITY_ACTION ");
        //獲取聯網狀態的NetworkInfo對象
        NetworkInfo info = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
        if (info == null) {
            return;
        }
        if (NetworkInfo.State.CONNECTED != info.getState() || !info.isAvailable()) {
            EventBus.getDefault().post(new NetChangerEvent(false));
            return;
        }

        int type = info.getType();
        //如果當前的網絡連接成功並且網絡連接可用
        if (type == ConnectivityManager.TYPE_WIFI || type == ConnectivityManager.TYPE_MOBILE) {
            Log.i("hcz", getConnectionType(info.getType()) + "連上");
            EventBus.getDefault().post(new NetChangerEvent(true));
        }
    }

    /**
     * 獲取連接類型
     *
     * @param type type
     * @return String
     */
    private String getConnectionType(int type) {
        String connType = "";
        if (type == ConnectivityManager.TYPE_MOBILE) {
            connType = "3G網絡數據";
        } else if (type == ConnectivityManager.TYPE_WIFI) {
            connType = "WIFI網絡";
        }
        return connType;
    }

}

時間變化廣播

注冊

        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(Intent.ACTION_TIME_TICK);                            //時間變化廣播
        registerReceiver(new TimeChangeReceiver(), intentFilter);

接收

public class TimeChangeReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (action.equals(Intent.ACTION_TIME_TICK)) {
            LogUtils.d("時間變化");
        }
    }
}

 

 

end


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM