Как найти имя пакета, которое было удалено при использовании Intent.ACTION_PACKAGE_REMOVED

У меня есть приложение, которое хранит журнал встроенных приложений, установленных на устройстве. После установки вызывается широковещательный приемник для 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.

Спасибо

Ответ 1

Имена пакетов находятся в намерении, которое вы получили от BroadcasReceiver, используйте функцию getData(), существует компонент ComponentMame установленного/деинсталлированного пакета.