在我的应用程序中,我想查看是否有任何其他应用程序从我的应用程序启动。所以我目前正在使用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帮助我。谢谢
答案 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以查看可能的方法来检测您的应用是否已转到后台。