经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » Android » 查看文章
Android 使用registerReceiver注册BroadcastReceiver案例详解
来源:jb51  时间:2021/8/26 10:36:29  对本文有异议

android.context.ContextWrapper.registerReceiver

  1. 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.

定义变量一

  1. private SDStateMonitorReceiver sdStateReceiver; //SDcard状态监测
  2. private LogTaskReceiver logTaskReceiver;

定义变量二

  1. private static String MONITOR_LOG_SIZE_ACTION = "MONITOR_LOG_SIZE"; //日志文件监测action
  2. private static String SWITCH_LOG_FILE_ACTION = "SWITCH_LOG_FILE_ACTION"; //切换日志文件action

定义变量三

  1. private final int SDCARD_TYPE = 0; //当前的日志记录类型为存储在SD卡下面
  2. private final int MEMORY_TYPE = 1; //当前的日志记录类型为存储在内存中
  3. private int CURR_LOG_TYPE = SDCARD_TYPE; //当前的日志记录类型

定义方法register

  1. private void register(){
  2. IntentFilter sdCarMonitorFilter = new IntentFilter();
  3. sdCarMonitorFilter.addAction(Intent.ACTION_MEDIA_MOUNTED);
  4. sdCarMonitorFilter.addAction(Intent.ACTION_MEDIA_UNMOUNTED);
  5. sdCarMonitorFilter.addDataScheme("file");
  6. sdStateReceiver = new SDStateMonitorReceiver();
  7. registerReceiver(sdStateReceiver, sdCarMonitorFilter);
  8. IntentFilter logTaskFilter = new IntentFilter();
  9. logTaskFilter.addAction(MONITOR_LOG_SIZE_ACTION);
  10. logTaskFilter.addAction(SWITCH_LOG_FILE_ACTION);
  11. logTaskReceiver = new LogTaskReceiver();
  12. registerReceiver(logTaskReceiver,logTaskFilter);
  13. }

定义BroadcastReceiver的子类SDStateMonitorReceiver

  1. /**
  2. * 监控SD卡状态
  3. */
  4. class SDStateMonitorReceiver extends BroadcastReceiver{
  5. public void onReceive(Context context, Intent intent) {
  6. if(Intent.ACTION_MEDIA_UNMOUNTED.equals(intent.getAction())){ //存储卡被卸载
  7. if(CURR_LOG_TYPE == SDCARD_TYPE){
  8. Log.d(TAG, "SDcar is UNMOUNTED");
  9. CURR_LOG_TYPE = MEMORY_TYPE;
  10. new LogCollectorThread().start();
  11. }
  12. }else{ //存储卡被挂载
  13. if(CURR_LOG_TYPE == MEMORY_TYPE){
  14. Log.d(TAG, "SDcar is MOUNTED");
  15. CURR_LOG_TYPE = SDCARD_TYPE;
  16. new LogCollectorThread().start();
  17. }
  18. }
  19. }
  20. }

定义BroadcastReceiver子类LogTaskReceiver

  1. /**
  2. * 日志任务接收
  3. * 切换日志,监控日志大小
  4. */
  5. class LogTaskReceiver extends BroadcastReceiver{
  6. public void onReceive(Context context, Intent intent) {
  7. String action = intent.getAction();
  8. if(SWITCH_LOG_FILE_ACTION.equals(action)){
  9. new LogCollectorThread().start();
  10. }else if(MONITOR_LOG_SIZE_ACTION.equals(action)){
  11. checkLogSize();
  12. }
  13. }
  14. }

在onCreate方法中调用register方法。

在onDestroy方法中执行语句

  1. unregisterReceiver(sdStateReceiver);
  2. unregisterReceiver(logTaskReceiver);

到此这篇关于Android 使用registerReceiver注册BroadcastReceiver案例详解的文章就介绍到这了,更多相关Android 使用registerReceiver注册BroadcastReceiver内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号