我想从后台服务中检测当前的前台活动。
特别是我想知道Home活动目前是否在Android活动堆栈的顶部。
用例类似于:如果家庭活动在前台(即用户未使用任何其他应用程序),我需要在后台服务中的某些事件上显示警告对话框。但是,如果Home活动不在堆栈之上(即用户正在使用其他应用程序),我应该在状态栏中显示某些服务中的通知。
有没有办法检测当前的前景活动?
答案 0 :(得分:5)
看到这个 here
在这里你可以找到前台Activity然后将它的包与home包进行比较。它可能是android.home
答案 1 :(得分:0)
您可以将您的主页活动绑定到onResume()
中的服务,并通知服务它正在运行。然后在onPause()
中,您可以再次调用该服务以通知它该活动不再在前台,并解除绑定。
答案 2 :(得分:0)
可能是这样的:
这将启动主屏幕 -
Intent i = new Intent();
i.setAction(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_HOME);
startActivity(i);
现在,检查热门活动 -
ActivityManager am = (ActivityManager) getSystemService(Activity.ACTIVITY_SERVICE);
String packageName = am.getRunningTasks(1).get(0).topActivity.getPackageName();
我没试过这个,但它应该有效。
答案 3 :(得分:0)
我使用了它,它既适用于默认启动器也适用于自定义启动器:
boolean isOnHomeApp() {
final Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
final ResolveInfo res = getPackageManager().resolveActivity(intent, 0);
ActivityManager am = (ActivityManager) getSystemService(Activity.ACTIVITY_SERVICE);
String packageName = am.getRunningTasks(1).get(0).topActivity.getPackageName();
if (res.activityInfo != null && packageName.equals(res.activityInfo.packageName)) {
return true;
}
return false;
}