У меня есть приложение, которое хранит журнал встроенных приложений, установленных на устройстве. После установки вызывается широковещательный приемник для Intent.PACKAGE_ADDED и записывает имя пакета с помощью следующего кода:
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) возвращается с нулевой информацией (как и следовало ожидать, учитывая, что она уже была удалена). Тем временем у меня есть временное решение, но оно не очень элегантное, и для следующей версии я хотел бы иметь более чистый код. Пример того, как должен работать код:
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.
Спасибо