如何检测家庭作业当前是否在ActivityStack的顶部

问题描述 投票:3回答:4

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

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

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

有什么方法可以检测当前的前台活动?

android service android-activity
4个回答
5
投票

看到这个here

在这里您可以找到前景Activity,然后将其包与home包进行比较。它可能是android.home


0
投票

您可以将家庭活动绑定到onResume()中的服务,并通知该服务正在运行。然后,在onPause()中,您可以再次调用该服务,以通知该活动不再位于前台,并取消绑定。


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();

我还没有尝试过,但是应该可以。


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;
}
© www.soinside.com 2019 - 2024. All rights reserved.