如何检测Home Activity是否当前位于ActivityStack的顶部

时间:2011-06-29 10:06:54

标签: android service android-activity

我想从后台服务中检测当前的前台活动。

特别是我想知道Home活动目前是否在Android活动堆栈的顶部。

用例类似于:如果家庭活动在前台(即用户未使用任何其他应用程序),我需要在后台服务中的某些事件上显示警告对话框。但是,如果Home活动不在堆栈之上(即用户正在使用其他应用程序),我应该在状态栏中显示某些服务中的通知。

有没有办法检测当前的前景活动?

4 个答案:

答案 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;
}