您好我正在使用应用程序,我正在捕获任何应用程序的安装/卸载事件。为此,我使用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;
}
}
答案 0 :(得分:5)
首先从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))