Android 获取有关安装或删除的应用程序的广播

标签 android broadcastreceiver

我想开发一个可以接收有关正在安装或删除的其他应用程序的广播的应用程序。到目前为止,我尝试了下面的代码,但它只在安装删除时提供广播事件,它不提供有关已安装或删除的其他应用程序的信息。那么,有没有办法获取新安装的应用程序的包名。

在 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/

相关文章:

android - 在 Android 中获取位图的 RGB 值

Android:跨模块共享测试代码

android - 服务中的 BroadcastReceiver 不接收广播 Android

android - 导航 Controller 和广播接收器

Android - 检测与特定 wifi ssid 断开连接的正确方法?

java - 警报管理器有时会在错误的时间触发

android - 以编程方式在 Android 中获取我们的手机

类似于 iPhone 的 Android OpenGL 混合

android - 读取NFC手机数据,使用NFC Reader

android - 如果调用 cancelDiscovery(),ACTION_DISCOVERY_FINISHED 还会出现吗?