2012-01-18 21 views
10

Mam aplikację, która utrzymuje dziennik wewnętrznych aplikacji zainstalowanych na urządzeniu. Po instalacji odbiornik transmisji dla Intent.PACKAGE_ADDED jest wywoływany i rejestruje nazwę pakietu za pomocą następującego kodu:Jak znaleźć nazwę pakietu, która została odinstalowana podczas używania Intent.ACTION_PACKAGE_REMOVED

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); 
    } 
} 

Problem mam skierowane jest w przypadku korzystania z odbiornika do transmisji Intent.PACKAGE_REMOVED, wszystkie odniesienia do pakietu poprzez unikalny identyfikator (UID) wraca z pustymi informacjami (Jak można się spodziewać, biorąc pod uwagę, że został już odinstalowany). Mam tymczasowe rozwiązanie w międzyczasie, ale nie jest to zbyt eleganckie, a do następnej wersji chciałbym mieć czystszy kod. Przykładem jak kod powinien działać:

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); 
    } 

} 

Przypomnę więc, pytanie brzmi:

Jak po tym, jak program został usunięty, można odwołać się do nazwy pakietu w odbiorniku transmisji dla intencyjny. PACKAGE_REMOVED.

Dzięki

+0

Otrzymuję również wartość null z getPackagesForUid (uid). To, czego chcę, to uzyskać listę wszystkich pakietów zainstalowanych dla bieżącego użytkownika. Czy ktoś może podać jakieś dane wejściowe? – Pratik

Odpowiedz

13

Pakiet imiona są w intencyjny dostałeś od BroadcasReceiver, użyj funkcji „getData()”, jest ComponentMame zainstalowanego pakietu/odinstalowane.

+12

Pracowałem świetnie ... po prostu użyłem getData(). GetSchemeSpecificPart(). Dzięki – Kennifer

+4

Kiedy wydrukuję intent.toString() widzę nazwę pakietu, ale kiedy używam intent.getData(). GetSchemeSpecificPart() otrzymuję pusty ciąg. Co ja robię źle? – gonzobrains

+3

@gonzobrains Prawdopodobnie nie ustawiłeś schematu? W manifeście powinno to wyglądać tak: ''. –

Powiązane problemy