知道窗口是否有焦点的可靠方法?

时间:2014-11-13 04:43:14

标签: android

我正在寻找一种可靠的方法来了解窗口是否具有焦点。

我已经阅读了onResume()的文档,其中说明了:请记住,onResume并不是您的活动对用户可见的最佳指标;诸如键盘锁之类的系统窗口可以在前面。使用onWindowFocusChanged(boolean)确定您的活动对用户可见
然后我阅读了onWindowFocusChanged(boolean)的文档,其中说明了:当活动的当前窗口获得或失去焦点时调用 Q1)这是否意味着onWindowFocusChanged(boolean)阻止而不是使用回调?

我还阅读了Making Android Games that Play NiceWhen does the Window focus change in Android?


并提出:

@Override
protected void onResume () {
    super.onResume();
    if(!hasWindowFocus()) // I don't want to wait for a windowFocusChanged event if this window already has the focus
        onWindowFocusChanged(true); // I assume this method blocks
    //This window has the focus.... do stuff
    //...
}

Q2)此代码是否确保窗口具有焦点?


感谢

1 个答案:

答案 0 :(得分:0)

要确认您的活动是焦点或用户可见,您可以在后台启动服务,不断检查最顶层的活动。

要检查最常见的活动,请使用以下内容。

Context context = someArbitraryContext;
ActivityManager am = (ActivityManager) context.getSystemService(Activity.ACTIVITY_SERVICE);
String packageName = am.getRunningTasks(1).get(0).topActivity.getPackageName();
String className = am.getRunningTasks(1).get(0).topActivity.getClassName();

如果包名和类名与您的名称匹配,则表示您的活动处于焦点。

注意:别忘了在清单中添加android:name="android.permission.GET_TASKS"权限

跳它可以帮助你。