/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界面错误,旋转屏幕而已,我也想问十万个为什么?离离原上谱