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