如何查找使用Intent.ACTION_PACKAGE_REMOVED时已经卸载的软件包名称

我有一个应用程序保持安装在设备上的内部开发应用程序的日志。 在安装时,将调用Intent.PACKAGE_ADDED的广播接收器,并使用以下代码logging包名称:

public class NewInstallReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Bundle b = intent.getExtras(); int uid = b.getInt(Intent.EXTRA_UID); String[] packages = context.getPackageManager().getPackagesForUid(uid); ApplicationService appService = new ApplicationService(context); appService.ApplicationInstalled(packages); } } 

我面对的问题是当使用Intent.PACKAGE_REMOVED广播接收器时,通过唯一标识(UID)的所有对包的引用都会返回空信息(正如您所期望的,因为它已被卸载)。 我有一个暂时的解决scheme,但它不是很优雅,下一个版本,我希望有更清晰的代码。 代码应该如何工作的一个例子:

 public class RemoveApplicationReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Bundle b = intent.getExtras(); int uid = b.getInt(Intent.EXTRA_UID); String[] packages = context.getPackageManager().getPackagesForUid(uid); ApplicationService appService = new ApplicationService(context); appService.ApplicationRemoved(packages); } } 

所以回顾一下,问题是:

在删除程序后,如何在Intent.PACKAGE_REMOVED的广播接收器中引用包名称。

谢谢

  • Android ClassCastException与空白types
  • Android L中显示错误的默认应用程序列表
  • adb“install”命令和“pm install”命令之间的区别?
  • 解决“包pipe理器已经死了”RuntimeException
  • ApplicationInfo和PackageInfo之间的区别?
  • Android:如何获得安装的活动列表,因为它们在启动器中显示,没有重复
  • 在Android 4.2+上使用intent安装apk时启用降级
  • Android包pipe理器已经因为TransactionTooLargeException而死亡
  • 软件包名称位于您从BroadcasReceiver获得的Intent中,使用“getData()”函数,已安装/未安装软件包的ComponentMame。