如何在后台服务中检查Android应用程序的顶级活动

时间:2013-12-23 09:22:44

标签: android android-service

在我的应用程序中,我想查看是否有任何其他应用程序从我的应用程序启动。所以我目前正在使用Activitymanager找到这样的顶级活动

ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
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();

但我想在后台服务中运行此代码。所以我可以检测到其他应用程序通过此启动。所以有任何想法这样做.Plz帮助我。谢谢

4 个答案:

答案 0 :(得分:3)

通过使用服务,您可以实现这一目标..

public void checkActivity() {
    handler = new Handler();
    activityRunnable = new ActivityRunnable();
    handler.postDelayed(activityRunnable, 500);
}

private class ActivityRunnable implements Runnable {
    @Override
    public void run() {
        ActivityManager manager = (ActivityManager) getApplicationContext()
                .getSystemService(Context.ACTIVITY_SERVICE);
        List<RunningTaskInfo> runningTasks = manager.getRunningTasks(1);
        if (runningTasks != null && runningTasks.size() > 0) {
            ComponentName topActivity = runningTasks.get(0).topActivity;
            // Here you can get the TopActivity for every 500ms
            if(!topActivity.getPackageName().equals(getPackageName())){
                // Other Application is opened
            }
            handler.postDelayed(this, 500);
        }
    }
}

checkActivity()的onCreate中调用service,不要忘记删除handler.removeCallbacks(activityRunnable);

中的onDestroy个回调

在LauncherActivity onCreate中启动该服务,并在LauncherActivity中停止该服务onDestroy

注意:别忘了在清单中添加权限

<uses-permission android:name="android.permission.GET_TASKS" />

答案 1 :(得分:-1)

您应该使用服务。然后,只有您才能完成后台流程。请仔细阅读服务http://developer.android.com/guide/components/services.html,您也会看到http://www.vogella.com/articles/AndroidServices/article.html两个网址都可以帮助您

答案 2 :(得分:-1)

而不是服务使用接收器来接收启动事件 在那里你可以实现这个代码。

答案 3 :(得分:-2)

您采取的方法是错误的,并且很容易让您的应用从Google Play商店中被拒绝(加上它可能会停止工作)。

检查this thread以查看可能的方法来检测您的应用是否已转到后台。