2013-01-08 7 views
7

は、次のように私のコードを実装している私のBroadcastReceiver class.Iからユーザーが開いたアプリを取得する必要があります。どのようにユーザーが現在開いているアプリケーションを取得するには?私は彼のdevice.Iにユーザー開いたりインストールされたアプリケーションを取得したいと思いソリューションを探しています

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


} 
上の私はすでに(インストール)に存在している新しいアプリを開いたときにLog.vでアプリ名を取得するために実行していないAppReciver上記のコードから

<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> 

:私としてもマニフェストファイルでこのレシーバについて追加した

デバイス上で実行されている他のアプリを一度だけ動作させています。

すべてのボディは、BroadcastReceiver

+0

私は、アプリ名にのみ新しいpackage_addedを取得していますが、私は私はあなたが求めているものを手に入れることができませんごめんなさい –

+0

package_restarted/package_install/package_replaced/package_restarted場合、私は取得する必要があります私のためにあなたの質問を言い換えることができますか? インストールされているすべてのアプリを取得しますか? –

答えて

2

から現在開かれたアプリケーションは、あなたに追加取得で私を助けてくださいregisterReceiverにサービスを提供します()。受信機の登録を忘れることを忘れないでください。登録解除のために

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

unregisterReceiver(appReceiver);

+0

Integer.MAX_VALUEに優先度を使用しても問題ありませんか? – gonzobrains

+1

SYSTEM_HIGH_PRIORITY値のIntentFilterクラスのドキュメントから:アプリケーションは、この優先順位以上のフィルターを決して使用しないでください。 – resource8218

関連する問題