您好,登錄后才能下訂單哦!
這篇文章主要介紹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è)資訊頻道!
免責(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)容。