【问题标题】:how to get running application/package name using broadcast receiver如何使用广播接收器获取正在运行的应用程序/包名称
【发布时间】:2013-04-19 05:49:40
【问题描述】:

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

 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>

【问题讨论】:

    标签: android android-intent broadcastreceiver


    【解决方案1】:

    这是一个使用活动管理器的好方法。您基本上可以从活动管理器中获取 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"
    

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

    【讨论】:

    • 使用广播接收器我应该得到任何应用程序正在运行..假设我打开计算器然后我的广播接收将得到该计算器当前正在运行
    • 您可以创建自己的意图并在后台线程更改顶级活动时触发它,但您仍然可以采用简单的方式!!
    • 你可以将你的逻辑放在线程中,它将检查顶级活动并处理它,如果你想在某些条件下调用另一个活动,你可以直接从线程中执行此操作
    • 我可以使用此代码。但首先我应该知道新(任何)应用程序已打开。通过使用您的代码,我将获得应用程序的名称
    • 因为它将在一个线程中维护 lastread top 活动的 UID 在一个临时变量中,并在您每次循环进入您的线程时将其与新读取的 UID 进行比较。
    【解决方案2】:

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

    【讨论】:

    • 发生某些事件时会抛出广播消息。但是在任何时候获取当前正在运行的应用程序你都不能有任何广播消息
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多