Gre*_*aue 27 user-interface android button android-3.0-honeycomb android-4.0-ice-cream-sandwich
我想知道这个按钮调用的方法.

我的游戏总是暂停/继续正常除当我使用这个按钮,它看起来像这个按钮不会调用onPause()和onResume()一个方法活动.它可以工作,如果我退出游戏,转到另一个窗口(如图片中的那个),然后使用此按钮恢复.但是,如果我只是按下这个按钮,当游戏时,游戏暂停,但线程dosnt恢复就像它每隔一段时间一样,游戏类型只是停留在屏幕上并且有点闪烁.
很难解释,但我希望我有点清楚,如果没有,请问!
Hit*_*sit 23
按下"最近的应用程序"按钮时,不会调用任何标准的活动生命周期方法.在最近的应用弹出列表后,活动将保持活动状态.通过此列表的半透明左侧部分,您甚至可以观察应用程序动画是否仍在运行,如果您运行的游戏中包含一些无法正确处理此情况的动画.实际上,Google Play中的许多游戏都没有正确处理这种情况,即使是像"愤怒的小鸟"这样的好游戏.
当用户打开"Recent Apps"列表(或从中返回)时,调用唯一的Activity方法是使用boolean参数onWindowFocusChangedhasFocus.当近期的应用方法的用户开放列表onWindowFocusChanged()调用hasFocus等号false,并呼吁用同样的方法hasFocus等于true当用户按下返回在此列表中.
要检测何时按下"最近的应用"按钮,您可以使用辅助功能服务.您需要运行自己的辅助功能服务并接收类型为"TYPE_WINDOW_STATE_CHANGED"的事件并检查事件的类名.
onAccessibilityEvent()AccessibilityEvent event对象,此对象包含有关刚刚在您的设备上发生的事件的所有必要信息.我们对ClassName感兴趣.ClassName有时可以为null,所以不要忘记!= null check.最近的应用程序窗口的程序包名称将根据Android的版本而有所不同:
不知道旧设备的类名,但我不认为有人在2017年维护它们;)
所以你会有这样的事情:
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
if (event.getEventType() != AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED || event.getClassName() == null)
return;
String className = String.valueOf(event.getClassName());
if (className.equals("com.android.internal.policy.impl.RecentApplicationsDialog")
|| className.equals("com.android.systemui.recent.RecentsActivity")
|| className.equals("com.android.systemui.recents.RecentsActivity")){
//Recent button was pressed. Do something.
}
}
Run Code Online (Sandbox Code Playgroud)
我在以下真实设备上进行了测试:LG,Nexus,索尼和虚拟设备:摩托罗拉,三星.
如果有人知道这些班级名称的例外情况,请告诉我.
我有同样的问题,我如下解决了这个问题。
注册“ Home”和“ RecentApp”的按钮单击广播
InnerReceiver mReceiver = new InnerReceiver();
IntentFilter mFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
registerReceiver(mReceiver, mFilter);
Run Code Online (Sandbox Code Playgroud)
现在,BroadcastReceiver代码
class InnerReceiver extends BroadcastReceiver {
final String SYSTEM_DIALOG_REASON_KEY = "reason";
final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps";
final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {
String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY);
if (reason != null) {
if (mListener != null) {
if (reason.equals(SYSTEM_DIALOG_REASON_HOME_KEY)) {
// Home Button click
} else if (reason.equals(SYSTEM_DIALOG_REASON_RECENT_APPS)) {
// RecentApp or Overview Button click
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是不要忘了unregisterReceiver广播接收器