1

私のアプリケーションでは、アプリケーションが実行されているブロードキャストを受信するコードを書きたいと思っています。アプリ名/パッケージ名を取得するにはどうすればよいですか???

 public class Receiver extends BroadcastReceiver {

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

    if("android.intent.action.PACKAGE_FIRST_LAUNCH".equals(intent.getAction()))
     System.out.println("context..."+context.getPackageName());


}
 }

androidmanifest ファイル -

  <receiver
        android:name="com.veg.app.Receiver"
        android:enabled="true"

        android:label="StartReceiver" >
        <intent-filter>
            <action android:name="android.intent.action.PACKAGE_FIRST_LAUNCH" />      
            <category android:name="android.intent.category.DEFAULT"/> 
        </intent-filter>
    </receiver>
4

2 に答える 2

4

これは、アクティビティ マネージャーを使用して行う良い方法です。基本的に、runningTasks はアクティビティ マネージャーから取得します。現在アクティブなタスクが常に最初に返されます。そこから topActivity を取得できます。

ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
 // get the info from the currently running task
     List< ActivityManager.RunningTaskInfo > taskInfo = am.getRunningTasks(1); 

     Log.d("topActivity", "CURRENT Activity ::"
             + taskInfo.get(0).topActivity.getClassName());

     ComponentName componentInfo = taskInfo.get(0).topActivity;
   componentInfo.getPackageName();

マニフェストには次の権限が必要です。

uses-permission android:name="android.permission.GET_TASKS"

また、アプリケーションが呼び出されたときに発生するそのようなイベントはありません。アプリケーションの開始時にインテントはブロードキャストされないため、最上位のアクティビティを監視するには、バックグラウンドで並行して実行されるスレッドが必要になる場合があります。

于 2013-04-19T09:19:50.753 に答える
3

ActivityManager.getRunningAppProcesses()を使用して、現在実行中のアプリケーションを見つけることができます。現在実行中のアプリケーションのActivityManager.RunningAppProcessInfoを返します。次に、 PckageManagerを使用して名前を取得できます

于 2013-04-19T05:50:59.880 に答える