溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Android如何使用registerReceiver注冊(cè)BroadcastReceiver

發(fā)布時(shí)間:2021-08-26 11:51:11 來(lái)源:億速云 閱讀:504 作者:小新 欄目:開發(fā)技術(shù)

這篇文章主要介紹Android如何使用registerReceiver注冊(cè)BroadcastReceiver,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

android.context.ContextWrapper.registerReceiver

public Intent registerReceiver (BroadcastReceiver receiver, IntentFilter filter)

Register a BroadcastReceiver to be run in the main activity thread. The receiver will be called with any broadcast Intent that matches filter, in the main application thread.

Parameters

receiver  The BroadcastReceiver to handle the broadcast.
filter  Selects the Intent broadcasts to be received.

Returns

The first sticky intent found that matches filter, or null if there are none.

定義變量一

private SDStateMonitorReceiver sdStateReceiver; //SDcard狀態(tài)監(jiān)測(cè)
private LogTaskReceiver logTaskReceiver;

定義變量二

private static String MONITOR_LOG_SIZE_ACTION = "MONITOR_LOG_SIZE";        //日志文件監(jiān)測(cè)action
private static String SWITCH_LOG_FILE_ACTION = "SWITCH_LOG_FILE_ACTION";    //切換日志文件action

定義變量三

private final int SDCARD_TYPE = 0;            //當(dāng)前的日志記錄類型為存儲(chǔ)在SD卡下面
private final int MEMORY_TYPE = 1;            //當(dāng)前的日志記錄類型為存儲(chǔ)在內(nèi)存中
private int CURR_LOG_TYPE = SDCARD_TYPE;    //當(dāng)前的日志記錄類型

定義方法register

private void register(){
    IntentFilter sdCarMonitorFilter = new IntentFilter();
    sdCarMonitorFilter.addAction(Intent.ACTION_MEDIA_MOUNTED);
    sdCarMonitorFilter.addAction(Intent.ACTION_MEDIA_UNMOUNTED);
    sdCarMonitorFilter.addDataScheme("file");
    sdStateReceiver = new SDStateMonitorReceiver();
    registerReceiver(sdStateReceiver, sdCarMonitorFilter);
    
    IntentFilter logTaskFilter = new IntentFilter();
    logTaskFilter.addAction(MONITOR_LOG_SIZE_ACTION);
    logTaskFilter.addAction(SWITCH_LOG_FILE_ACTION);
    logTaskReceiver = new LogTaskReceiver();
    registerReceiver(logTaskReceiver,logTaskFilter);
}

定義BroadcastReceiver的子類SDStateMonitorReceiver

/**
 * 監(jiān)控SD卡狀態(tài)
 */
class SDStateMonitorReceiver extends BroadcastReceiver{
    public void onReceive(Context context, Intent intent) {
        
        if(Intent.ACTION_MEDIA_UNMOUNTED.equals(intent.getAction())){    //存儲(chǔ)卡被卸載
            if(CURR_LOG_TYPE == SDCARD_TYPE){
                Log.d(TAG, "SDcar is UNMOUNTED");
                CURR_LOG_TYPE = MEMORY_TYPE;
                new LogCollectorThread().start();
            }
        }else{                                                            //存儲(chǔ)卡被掛載
            if(CURR_LOG_TYPE == MEMORY_TYPE){
                Log.d(TAG, "SDcar is MOUNTED");
                CURR_LOG_TYPE = SDCARD_TYPE;
                new LogCollectorThread().start();
                
            }
        }
    }
}

定義BroadcastReceiver子類LogTaskReceiver

/**
 * 日志任務(wù)接收
 * 切換日志,監(jiān)控日志大小
 */
class LogTaskReceiver extends BroadcastReceiver{
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if(SWITCH_LOG_FILE_ACTION.equals(action)){
            new LogCollectorThread().start();
        }else if(MONITOR_LOG_SIZE_ACTION.equals(action)){
            checkLogSize();
        }
    }
}

在onCreate方法中調(diào)用register方法。

在onDestroy方法中執(zhí)行語(yǔ)句

unregisterReceiver(sdStateReceiver);
unregisterReceiver(logTaskReceiver);

以上是“Android如何使用registerReceiver注冊(cè)BroadcastReceiver”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI