我希望我的应用程序检测外部存储状态何时发生变化。起初在我的 AndroidManifest 中定义了一个 BroadcastReceiver。在这里我可以像这样设置android:process
和android:exported
属性:
<receiver android:name=".StorageStateReceiver" android:process=":storage_state" android:exported="false">
<intent-filter>
<action android:name="android.intent.action.MEDIA_UNMOUNTED" />
<action android:name="android.intent.action.MEDIA_MOUNTED" />
<action android:name="android.intent.action.MEDIA_EJECT" />
<action android:name="android.intent.action.MEDIA_BAD_REMOVAL" />
<data android:scheme="file" />
</intent-filter>
</receiver>
然后我意识到我只在一个 Activity 中使用这个接收器,所以不需要在应用程序启动时实例化它,而是可以在代码中以编程方式定义它。这就是我想出的:
BroadcastReceiver StorageStateReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// Do what needs to be done
}
};
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_MEDIA_UNMOUNTED);
filter.addAction(Intent.ACTION_MEDIA_MOUNTED);
filter.addAction(Intent.ACTION_MEDIA_EJECT);
filter.addAction(Intent.ACTION_MEDIA_BAD_REMOVAL);
filter.addDataScheme("file");
getApplicationContext().registerReceiver(StorageStateReceiver, filter);
我将此代码放在我活动的 onCreate() 方法中。
但我找不到process
从代码中设置的方法。我已阅读有关 BroadcastReceiver 和 Context 类的文档。BroadcastReceiver 似乎没有托管任何让您定义进程名称的方法。另一方面, registerReceiver() 可以接受两个额外的参数:String broadcastPermission
, Handler scheduler
. Handler 听起来很有希望,但我找不到可以接受字符串形式的进程名称的 Handler 构造函数。我觉得我的想法已经用完了。有没有办法以编程方式设置进程名称?