我想开发一个可以接收有关正在安装或删除的其他应用程序的广播的应用程序。到目前为止,我尝试了下面的代码,但它只在安装删除时提供广播事件,它不提供有关已安装或删除的其他应用程序的信息。那么,有没有办法获取新安装的应用程序的包名。
在 list 中:
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>
在 AppListener 中:
public class AppListener extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// there is a broadcast event here
// but how to get the package name of the newly installed application
Log.v(TAG, "there is a broadcast");
}
}
添加: 这在 Api 14 或更高版本中已弃用。
<action android:name="android.intent.action.PACKAGE_INSTALL"/>
最佳答案
包名称嵌入到您在 onReceive() 方法中接收的 Intent 中。您可以使用以下代码 fragment 阅读它:
Uri data = broadcastIntent.getData();
String installedPackageName = data.getEncodedSchemeSpecificPart();
对于 PACKAGE_ADDED、PACKAGE_REMOVED 和 PACKAGE_REPLACED,您可以使用上面的代码获取包名称。
在应用程序更新的情况下,您将收到 2 个背靠背的广播,如下所示: 1. PACKAGE_REMOVED 2. PACKAGE_REPLACED
在应用程序更新的情况下,PACKAGE_REMOVED Intent 将包含额外的 bool 值以区分应用程序删除和应用程序更新。 您可以按如下方式阅读此 bool 值:
boolean isReplacing = broadcastIntent.getBooleanExtra(Intent.EXTRA_REPLACING, false);
只是为了获取您正在调用 PackageManagerService api 的包名称是开销。必须避免它。
希望这对您有所帮助。
关于Android 获取有关安装或删除的应用程序的广播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25397588/