/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
定义变量:private boolean stch = false;
keyCode == KeyEvent.KEYCODE_APP_SWITCH
取消原来逻辑,采用广播打开近期任务后台
/*/
if (!keyguardOn) {
if (down && repeatCount == 0) {
preloadRecentApps();
} else if (!down) {
toggleRecentApps();
}
}
//*/
新增代码如下:
//*/if (down) {stch = !stch;if (stch) {Intent intent = new Intent();intent.setClassName("com.android.launcher3","com.android.quickstep.RecentsActivity");intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP );Log.d("TYD","---------RecentsActivity-------------"+intent);mContext.startActivity(intent);stch = true;} else {//mGotoBack();if("com.android.launcher3.uioverrides.QuickstepLauncher".equals(getCurrentActivityName()) ) {Intent intent2 = new Intent();intent2.setClassName("com.android.launcher3","com.android.quickstep.RecentsActivity");intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP );Log.d("TYD","---------RecentsActivity222-------------"+intent2);mContext.startActivity(intent2);stch = true;Log.d("TYD","---------else stch:-------------"+stch);} else {mGotoEnter();mGotoEnter2();Log.d("TYD","---------mGotoEnter-------------"+stch);}}}//*/
引用模拟按键方法:
广播open两次+打开应用需确认两次。目前验证暂无其他bug。
//*/update recents app layout +QuickstepLauncher
private void mGotoBack(){
new Thread() {
public void run() {
try {
Instrumentation inst = new Instrumentation();
inst.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
}
private void mGotoEnter(){
new Thread() {
public void run() {
try {
Instrumentation inst = new Instrumentation();
inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);//KEYCODE_DPAD_CENTER //KEYCODE_ENTER
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
}
private void mGotoEnter2(){
new Thread() {
public void run() {
try {
Instrumentation inst = new Instrumentation();
inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);//KEYCODE_DPAD_CENTER //KEYCODE_ENTER
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
}
//*/
注意,需在home键和back返回键等虚拟按键做标志位:按下的时候走
stch = false;
否则 会出现不可描述的问题
至于为什么会出现UI界面错误,旋转屏幕而已,我也想问十万个为什么?离离原上谱