Keyboard 如何在android 8.1.0中检测最近的按钮
我想检测最近的按钮,但在android 8.1.0中它不工作。下面的代码正在另一个版本的android上工作,但在8.1.0中,Keyboard 如何在android 8.1.0中检测最近的按钮,keyboard,android-softkeyboard,keyboard-events,android-8.0-oreo,recent-screens,Keyboard,Android Softkeyboard,Keyboard Events,Android 8.0 Oreo,Recent Screens,我想检测最近的按钮,但在android 8.1.0中它不工作。下面的代码正在另一个版本的android上工作,但在8.1.0中,意图。操作\u关闭\u系统\u对话框广播未调用。我使用下面的实现 public class HomeWatcher { static final String TAG = "hg"; private Context mContext; private IntentFilter mFilter; private OnHomePressedListener mListene
意图。操作\u关闭\u系统\u对话框
广播未调用。我使用下面的实现
public class HomeWatcher {
static final String TAG = "hg";
private Context mContext;
private IntentFilter mFilter;
private OnHomePressedListener mListener;
private InnerRecevier mRecevier;
public HomeWatcher(Context context) {
mContext = context;
mFilter = new IntentFilter();
mFilter.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
mFilter.addAction("");
}
public void setOnHomePressedListener(OnHomePressedListener listener) {
mListener = listener;
mRecevier = new InnerRecevier();
}
public void startWatch() {
if (mRecevier != null) {
mContext.registerReceiver(mRecevier, mFilter);
}
}
public void stopWatch() {
if (mRecevier != null) {
mContext.unregisterReceiver(mRecevier);
}
}
class InnerRecevier extends BroadcastReceiver {
final String SYSTEM_DIALOG_REASON_KEY = "reason";
final String SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS = "globalactions";
final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps";
final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {
String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY);
if (reason != null) {
Log.e(TAG, "action:" + action + ",reason:" + reason);
if (mListener != null) {
if (reason.equals(SYSTEM_DIALOG_REASON_HOME_KEY)) {
mListener.onHomePressed();
} else if (reason.equals(SYSTEM_DIALOG_REASON_RECENT_APPS)) {
mListener.onHomeLongPressed();
}
}
}
}
}
}
}
在课堂上,我用下面的代码打电话
HomeWatcher mHomeWatcher = new HomeWatcher(this);
mHomeWatcher.startWatch();
请帮忙
已编辑----
上述代码在正常流程中正常工作,但当屏幕固定设置(打开)时,则不工作。即使我没有收到任何事件,如
KeyUp
,KeyDown
请使用下面的代码
`@Override
public boolean dispatchKeyEvent(KeyEvent event) {
Log.i("key pressed", String.valueOf(event.getKeyCode()));
return super.dispatchKeyEvent(event);
}`
当您单击“最近的应用”按钮时,com.android.systemui程序包将成为前台应用程序,因此,如果前台运行的应用程序是“com.android.systemui”,请查找前台运行的应用程序并启动您的页面。我也面临同样的问题。您解决了这个问题吗?@Mad code请查看我的回答抱歉,此呼叫未接收。您能否共享完整的java文件。它适用于某些版本,但不一致。