Android获取有关安装或删除的应用程序的广播
我想开发一个应用程序,可以接收有关正在安装或删除的其他应用程序的广播。到目前为止,我尝试了下面的代码,但它仅在发生删除安装时提供广播事件,而不提供有关beibg安装或删除的其他应用程序的信息。那么,有没有办法获取新安装的应用程序的包名呢 在manifset中:Android获取有关安装或删除的应用程序的广播,android,broadcastreceiver,Android,Broadcastreceiver,我想开发一个应用程序,可以接收有关正在安装或删除的其他应用程序的广播。到目前为止,我尝试了下面的代码,但它仅在发生删除安装时提供广播事件,而不提供有关beibg安装或删除的其他应用程序的信息。那么,有没有办法获取新安装的应用程序的包名呢 在manifset中: receiver android:name=".apps.AppListener"> <intent-filter android:priority="100"> <action andr
receiver android:name=".apps.AppListener">
<intent-filter android:priority="100">
<action android:name="android.intent.action.PACKAGE_INSTALL"/>
<action android:name="android.intent.action.PACKAGE_ADDED"/>
<action android:name="android.intent.action.PACKAGE_REMOVED"/>
<data android:scheme="package"/>
</intent-filter>
</receiver>
添加:
对于Api 14或更高版本,这是不推荐的
<action android:name="android.intent.action.PACKAGE_INSTALL"/>
有两个选项:
(一)
如果您询问在卸载同一应用程序时是否可以接收广播,则答案是:
除非您是系统应用程序,否则无法执行此操作
Android不会在安装应用程序时通知应用程序。这将是一个安全风险,因为它会使应用程序阻止卸载
(二)
如果您询问其他应用程序何时卸载,则这可能是以下内容的重复:
intent.getData().toString()
您可以通过此函数获取应用程序名称:
private String getApplicationName(Context context, String data, int flag) {
final PackageManager pckManager = context.getPackageManager();
ApplicationInfo applicationInformation;
try {
applicationInformation = pckManager.getApplicationInfo(data, flag);
} catch (PackageManager.NameNotFoundException e) {
applicationInformation = null;
}
final String applicationName = (String) (applicationInformation != null ? pckManager.getApplicationLabel(applicationInformation) : "(unknown)");
return applicationName;
}
有关更多信息,请查看:
包名嵌入到您在onReceive()方法中接收的意图中。您可以使用以下代码段来阅读:
Uri data = broadcastIntent.getData();
String installedPackageName = data.getEncodedSchemeSpecificPart();
对于添加的包、删除的包和替换的包,您可以使用上述代码获取包名称
在应用程序更新的情况下,您将获得2次背靠背广播,如下所示:
1.包装2已拆除。更换包装
在应用程序更新的情况下,包_REMOVED intent将包含额外的布尔值,以区分应用程序删除和应用程序更新。
您可以按如下方式阅读此布尔值:
boolean isReplacing = broadcastIntent.getBooleanExtra(Intent.EXTRA_REPLACING, false);
仅为了获取包名,您调用PackageManagerService api的开销很大。我们必须避免它
希望,这将对您有所帮助。谢谢,但我无法获得有关正在安装的应用程序的信息。我认为API 14或更高版本不推荐使用PACKAGE_安装。这方面有什么解决办法吗?但是如何知道在清单中没有安装PACKAGE_的情况下是否安装了应用程序(因为它已被弃用),您可以检查操作:intent.getAction().equals(“android.intent.action.PACKAGE_已添加”)
boolean isReplacing = broadcastIntent.getBooleanExtra(Intent.EXTRA_REPLACING, false);