我正在寻找一种可靠的方法来了解窗口是否具有焦点。
我已经阅读了onResume()
的文档,其中说明了:请记住,onResume并不是您的活动对用户可见的最佳指标;诸如键盘锁之类的系统窗口可以在前面。使用onWindowFocusChanged(boolean)
确定您的活动对用户可见。
然后我阅读了onWindowFocusChanged(boolean)
的文档,其中说明了:当活动的当前窗口获得或失去焦点时调用。 Q1)这是否意味着onWindowFocusChanged(boolean)
阻止而不是使用回调?
我还阅读了Making Android Games that Play Nice和When 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)此代码是否确保窗口具有焦点?
感谢
答案 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"
权限
跳它可以帮助你。