Ant*_*hyn 5 storage android broadcastreceiver
我希望我的应用程序检测外部存储状态何时发生变化.最初在我的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>
Run Code Online (Sandbox Code Playgroud)
然后我意识到我只在一个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);
Run Code Online (Sandbox Code Playgroud)
我把这段代码放在我活动的onCreate()方法中.
但我找不到process从代码设置的方法.我已经阅读了有关BroadcastReceiver和Context类的文档.BroadcastReceiver似乎没有托管任何允许您定义进程名称的方法.另一方面,registerReceiver()可以加入两个额外的参数:String broadcastPermission,Handler scheduler.处理程序听起来很有希望,但我找不到一个Handler构造函数,它可以接受一个字符串形式的进程名称.我觉得我没有想法了.有没有办法以编程方式设置进程名称?
然后我意识到我只在一个 Activity 中使用此接收器,因此无需在应用程序启动时实例化它,而是可以在代码中以编程方式定义它。
清单注册BroadcastReceiver不是“在应用程序启动时实例化”。仅当发送匹配的广播时才会实例化它。
但我找不到从代码设置流程的方法。
那是因为这是不可能的。此外,你并不需要它,而且它会浪费 RAM、CPU 和电池,从而损害用户的利益。您也不应该在清单条目中拥有该android:process属性,除非您完全准确地知道为什么需要另一个进程。绝大多数 Android 应用程序都没有。
| 归档时间: |
|
| 查看次数: |
2517 次 |
| 最近记录: |