Android 知道窗口是否有焦点的可靠方法?
我正在寻找一种可靠的方法来确定窗口是否有焦点Android 知道窗口是否有焦点的可靠方法?,android,Android,我正在寻找一种可靠的方法来确定窗口是否有焦点 我已经阅读了的文档,其中写道:请记住,onResume并不是用户可以看到您的活动的最佳指示器;系统窗口(如键盘防护装置)可能在前面。使用onWindowFocusChanged(布尔值)确定您的活动对用户可见 然后我阅读了的文档,上面写着:当活动的当前窗口获得或失去焦点时调用Q1)这是否意味着onWindowFocusChanged(布尔)阻塞而不是使用回调? 我也阅读和阅读 并提出: @Override protected void onResu
我已经阅读了的文档,其中写道:请记住,onResume并不是用户可以看到您的活动的最佳指示器;系统窗口(如键盘防护装置)可能在前面。使用
onWindowFocusChanged(布尔值)
确定您的活动对用户可见然后我阅读了的文档,上面写着:当活动的当前窗口获得或失去焦点时调用Q1)这是否意味着
onWindowFocusChanged(布尔)
阻塞而不是使用回调?
我也阅读和阅读
并提出:
@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)此代码是否确保窗口具有焦点?
感谢要确认您的活动处于焦点或用户可见状态,您可以在后台启动一项服务,该服务将持续检查最上面的活动 要检查最重要的活动,请使用以下命令
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”
权限
希望它能帮助你。@Shashank谢谢。我没有,因为我不知道如何处理
requestFocus()
中的false
。我想这意味着您需要覆盖onWindowFocusChanged
?谢谢。让一个服务在后台进行检查对我来说是一种过分的行为。巧妙的tho.我认为对这样一项任务再获得一次许可是一种过激的行为。。。然而,这是一个巧妙的解决方案。