我想从后台服务中检测当前的前台活动。
特别是我想知道Home活动当前是否在android活动堆栈的顶部。
用例类似于:如果家庭活动处于前台(即用户未使用任何其他应用程序),则需要在后台服务中的某个事件上显示警报对话框。但是,如果Home活动不在堆栈顶部(即用户正在使用其他应用程序),则应该在服务中发生的某些事件的状态栏中显示通知。
有什么方法可以检测当前的前台活动?
看到这个here
在这里您可以找到前景Activity,然后将其包与home包进行比较。它可能是android.home
您可以将家庭活动绑定到onResume()
中的服务,并通知该服务正在运行。然后,在onPause()
中,您可以再次调用该服务,以通知该活动不再位于前台,并取消绑定。
也许这可行:
这将启动主屏幕-
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();
我还没有尝试过,但是应该可以。
我使用了它,它既适用于默认启动器也适用于自定义启动器:
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;
}