2013-01-08 13 views
7

szukam rozwiązania, które chciałbym uzyskać użytkownik otworzy lub zainstalowaną aplikację na swoich device.I dostać których aplikacja otwarte przez użytkownika z mojego BroadcastReceiver class.I wdrożyły mój kod w następujący sposób:jak uzyskać aktualną otwartą aplikację użytkownika?

public class AppReceiver extends BroadcastReceiver{ 

@Override 
public void onReceive(Context context, Intent intent) { 

    ActivityManager am = (ActivityManager)context.getSystemService(context.ACTIVITY_SERVICE); 
    List l = am.getRunningAppProcesses(); 
    Iterator i = l.iterator(); 
    PackageManager pm = context.getPackageManager(); 
    while(i.hasNext()) { 
     ActivityManager.RunningAppProcessInfo info = (ActivityManager.RunningAppProcessInfo)(i.next()); 
     try { 

     CharSequence c = pm.getApplicationLabel(pm.getApplicationInfo(info.processName, PackageManager.GET_META_DATA)); 
     Log.v(" App Name : ", c.toString()); 


     }catch(Exception e) { 
     } 
    } 


} 

Dodałem także o tym do otrzymania na pliku manifestu jak:

<receiver android:name="AppReciever"> 
     <intent-filter> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <action android:name="android.intent.action.PACKAGE_ADDED"></action> 
      <action android:name="android.intent.action.PACKAGE_CHANGED"></action> 
      <action android:name="android.intent.action.PACKAGE_INSTALL"></action> 
      <action android:name="android.intent.action.PACKAGE_REPLACED"></action> 
      <action android:name="android.intent.action.PACKAGE_RESTARTED"></action> 
    <data android:scheme="package" /> 

    </intent-filter> 
    </receiver> 

z powyższego kodu AppReciver nie wykonywania przez uzyskać nazwę aplikacji na Log.v kiedy otwarto nową aplikację, która już istniała (zainstalowany) na urządzenie. Działa tylko raz, gdy inna aplikacja działa na urządzeniu.

Proszę każdy organ mi pomóc dostać się na bieżące otwarte aplikacje z BroadcastReceiver

+0

jestem coraz nazwa aplikacji tylko nowe package_added ale muszę dostać jeśli package_restarted/package_install/package_replaced/package_restarted –

+0

przykro mi, że nie może dostać co pytasz czy możesz przeformułować swoje pytanie dla mnie? Czy chcesz pobrać wszystkie zainstalowane aplikacje? –

Odpowiedz

2

Dodaj do ciebie naprawiać registerReceiver(). Nie zapomnij wyrejestrować odbiornika;

AppReceiver appReceiver = new AppReceiver(); 
    IntentFilter intentFilter = new IntentFilter(); 
    intentFilter.setPriority(900); 
    intentFilter.addAction(Intent.ACTION_PACKAGE_ADDED); 
    intentFilter.addAction(Intent.ACTION_PACKAGE_CHANGED); 
    intentFilter.addAction(Intent.ACTION_PACKAGE_INSTALL); //@deprecated This constant has never been used. 
    intentFilter.addAction(Intent.ACTION_PACKAGE_REPLACED); 
    intentFilter.addAction(Intent.ACTION_PACKAGE_RESTARTED); 
    registerReceiver(appReceiver, intentFilter); 

Dla wyrejestrowanie: unregisterReceiver(appReceiver);

+0

Czy istnieje jakakolwiek przeszkoda w użyciu wartości Integer.MAX_VALUE w priorytecie? – gonzobrains

+1

Z dokumentacji klasy IntentFilter dla wartości SYSTEM_HIGH_PRIORITY: Aplikacje nigdy nie powinny używać filtrów o tych lub wyższych priorytetach. – resource8218

Powiązane problemy