如何使用广播接收器获取运行的应用程序/包名称

时间:2013-04-19 05:49:40

标签: android android-intent broadcastreceiver

在我的应用程序中,我想编写接收应用程序运行的广播代码。就像我们运行/打开任何应用程序时,我的广播接收器应该接收它。 我怎样才能获得应用程序名称/包名称???

 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>

2 个答案:

答案 0 :(得分: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"

调用任何应用程序时都会触发没有此类事件。任何意图都不会在应用程序启动时广播,因此您可能需要在后台并行运行一个线程来监视顶级活动。

答案 1 :(得分:3)

您可以使用ActivityManager.getRunningAppProcesses()来查找当前正在运行的应用程序。 它将返回当前正在运行的应用程序的ActivityManager.RunningAppProcessInfo。然后,您可以使用PckageManager

获取名称