我正在尝试接收广播意图来检查当前正在启动哪个应用程序。 (为了发送通知/弹出窗口,提醒用户)
在我的清单文件中:
<receiver
android:name=".domain.background.receiver.OpenedApplicationBroadcastReceiver"
android:exported="true">
<intent-filter>
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</receiver>
并在接收器中做一些事情:
class OpenedApplicationBroadcastReceiver : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
// do something if it is application xyz
}
}
但到目前为止这还不起作用。
但是我也很不知道要在我的
<intent-filter>
中放入什么才能接收这样的广播。
我需要更改什么才能使我的代码正常工作?
您可以为 ACTION_PACKAGE_ADDED 和 ACTION_PACKAGE_REPLACED 意图注册广播接收器。当安装或替换新软件包时,这些意图会被广播,这将告诉您正在启动应用程序。
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action != null && (action.equals(Intent.ACTION_PACKAGE_ADDED) ||action.equals(Intent.ACTION_PACKAGE_REPLACED))) {
String packageName = intent.getDataString();
Log.d("PackageChangeReceiver", "Package added/replaced: " + packageName);
// You can check the package name to find which app is being launched
}
}
这应该在清单文件中完成。
<receiver android: name=".dBroadcastReceiver">
<intent-filter>
<action android: name="android.intent.action.PACKAGE_ADDED" />
<action android: name="android.intent.action.PACKAGE_REPLACED" />
<data android: scheme="package" />
</intent-filter>
</receiver>