我正在尝试以编程方式注册 BroadcastReceiver 以接收android.intent.action.MEDIA_MOUNTED
。但是,该onReceive()
方法永远不会被触发。如果我在应用程序的清单文件中静态注册,我创建的同一个 BroadcastReceiver 类可以正常工作。
为什么会这样?有没有办法解决这个问题?我需要动态注册,因为我的 BroadcastReceiver 类包含我希望服务稍后查询的成员。如果我静态地捕捉到这个 Intent,那么我就没有简单的方法来查询这些成员,因为我相信 BroadcastReceiver 的实例会在onReceive()
完成后立即被删除。这个对吗?考虑到 Android文档对此有以下说法,我很确定就是这种情况:
如果此 BroadcastReceiver 是通过标签启动的,则对象在从此函数返回后不再存在。
更新 1:
这是我的动态注册码:
if (externalStorageListener == null) { Log.d(TAG, "creating externalStorageListener...");
IntentFilter filterExternalStorage = new IntentFilter();
filterExternalStorage.addAction(Intent.ACTION_MEDIA_MOUNTED);
filterExternalStorage.addDataScheme("file");
filterExternalStorage.setPriority(Integer.MAX_VALUE);
externalStorageListener = new ExternalStorageBroadcastReceiver();
registerReceiver(externalStorageListener, filterExternalStorage);
}
这是我清单中实际有效的意图过滤器:
<intent-filter>
<action android:name="android.intent.action.MEDIA_MOUNTED" />
<data android:scheme="file"/>
</intent-filter>