gpt4 book ai didi

android - 更新应用程序广播接收器在 Android 中被调用两次

转载 作者:行者123 更新时间:2023-11-29 15:12:43 25 4
gpt4 key购买 nike

你好,我正在开发应用程序,我正在捕获任何应用程序的安装/卸载事件。为此,我正在使用 BroadcastReceiver,一切正常,但我发现每当任何应用程序更新时,同样的 BroadcastReceiver 会被调用两次。

首先是卸载,然后是安装事件。我不想捕获任何应用程序的更新事件。我该如何控制。

<receiver android:name=".ReceiverInstallApp" >
<intent-filter android:priority="2147483647" >
<action android:name="android.intent.action.PACKAGE_ADDED" />
<action android:name="android.intent.action.PACKAGE_INSTALL" />
<action android:name="android.intent.action.PACKAGE_REMOVED" />

<data android:scheme="package" />
</intent-filter>
</receiver>

ReceiverInstallApp.java

private final String packageAdded = "android.intent.action.PACKAGE_ADDED";
private final String packageInstalled = "android.intent.action.PACKAGE_INSTALL";
private final String packageUninstalled = "android.intent.action.PACKAGE_REMOVED";

public void onReceive(Context context, Intent intent) {
this.context = context;
Uri uri = intent.getData();
// this will be the name of the package
pkgName = uri != null ? uri.getSchemeSpecificPart() : null;

switch (intent.getAction().toString()) {

case packageInstalled:
setAppStatusInstall(context, pkgName);
break;
case packageAdded:
setAppStatusInstall(context, pkgName);
break;
case packageUninstalled:
setAppStatusUninstall(context, pkgName);
break;
default:
break;
}

}

最佳答案

首先从 XML 中删除这一行,因为该值已被弃用:

<action android:name="android.intent.action.PACKAGE_INSTALL" />

如果您只想第一次安装包,那么在调用您的 setAppStatus 函数之前在 onReceive 方法中添加一个检查,如下所示:

Bundle extras = intent.getExtras();
if (extras.containsKey(Intent.EXTRA_REPLACING) && extras.getBoolean(Intent.EXTRA_REPLACING))

关于android - 更新应用程序广播接收器在 Android 中被调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28992640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com