安卓手势多任务
安卓手势多任务是指在安卓系统中,通过特定的手势操作来实现多任务管理的功能。
以下是一些常见的安卓手势多任务操作:
- 从屏幕底部上滑:这是最常见的安卓手势多任务操作之一。在大多数安卓手机上,从屏幕底部向上滑动一段距离,然后停留片刻,即可进入多任务视图。在多任务视图中,可以看到最近使用的应用程序的卡片,通过左右滑动可以切换应用程序,向上滑动可以关闭应用程序。
- 从屏幕底部上滑并停顿:在一些安卓手机上,从屏幕底部向上滑动一段距离后停顿片刻,可以直接进入多任务视图,而无需停留。
- 从屏幕两侧向内滑动:在一些安卓手机上,从屏幕两侧向内滑动一段距离,然后停留片刻,也可以进入多任务视图。
- 双击屏幕:在一些安卓手机上,双击屏幕可以唤醒屏幕或进入多任务视图。具体的操作方式可能因手机品牌和型号而异。
- 按手势导航按钮
不同的安卓手机可能会有不同的手势多任务操作方式,具体的操作方式可以参考手机的用户手册或在设置中查找相关的手势设置。
需求
禁用上滑进多任务的功能, 上滑不再显示多任务界面.
分析
- 要禁用手势导航按键的多任务要改SystemUI
- 要禁用上滑多任务要改Launcher
实现
禁用上滑进多任务的功能
packages/apps/Launcher3/quickstep/src/com/android/quickstep/TaskAnimationManager.java
注释掉里面的startRecentsActivity处的代码.
diff --git a/packages/apps/Launcher3/quickstep/src/com/android/quickstep/TaskAnimationManager.java b/packages/apps/Launcher3/quickstep/src/com/android/quickstep/TaskAnimationManager.java
index cad51f4cc6..7cf3463b36 100644
--- a/packages/apps/Launcher3/quickstep/src/com/android/quickstep/TaskAnimationManager.java
+++ b/packages/apps/Launcher3/quickstep/src/com/android/quickstep/TaskAnimationManager.java
@@ -45,6 +45,7 @@ public class TaskAnimationManager implements RecentsAnimationCallbacks.RecentsAn
*/
public void preloadRecentsAnimation(Intent intent) {
// Pass null animation handler to indicate this start is for preloading
+ Log.d("Ani", "preloadRecentsAnimation");
UI_HELPER_EXECUTOR.execute(() -> ActivityManagerWrapper.getInstance()
.startRecentsActivity(intent, null, null, null, null));
}
@@ -118,8 +119,11 @@ public class TaskAnimationManager implements RecentsAnimationCallbacks.RecentsAn
});
mCallbacks.addListener(gestureState);
mCallbacks.addListener(listener);
+ Log.d("Ani", "startRecentsAnimation");
+ /*
UI_HELPER_EXECUTOR.execute(() -> ActivityManagerWrapper.getInstance()
.startRecentsActivity(intent, null, mCallbacks, null, null));
+ */
gestureState.setState(STATE_RECENTS_ANIMATION_INITIALIZED);
return mCallbacks;
}
在安卓13上实测通过.
禁用手势导航多任务按键
frameworks/base/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyRecentsImpl.java
@Override
public void toggleRecentApps() {
// 注释掉toggleRecentApps函数中的所有代码, 就可禁用
/*
// If connected to launcher service, let it handle the toggle logic
IOverviewProxy overviewProxy = mOverviewProxyService.getProxy();
if (overviewProxy != null) {
final Runnable toggleRecents = () -> {
try {
if (mOverviewProxyService.getProxy() != null) {
mOverviewProxyService.getProxy().onOverviewToggle();
mOverviewProxyService.notifyToggleRecentApps();
}
} catch (RemoteException e) {
Log.e(TAG, "Cannot send toggle recents through proxy service.", e);
}
};
// Preload only if device for current user is unlocked
if (mStatusBarLazy != null && mStatusBarLazy.get().isKeyguardShowing()) {
mStatusBarLazy.get().executeRunnableDismissingKeyguard(() -> {
// Flush trustmanager before checking device locked per user
mTrustManager.reportKeyguardShowingChanged();
mHandler.post(toggleRecents);
}, null, true , false ,
true);
} else {
toggleRecents.run();
}
return;
} else {
// Do nothing
}
*/
}
上面只是禁用上滑进多任务的功能,及不显示最下方的NavigationBar横条, 上层应用如果要自己使用底部上滑功能,需要传参数告之systemui, 与launcher不要拦截上滑事件。
在设置setContentView(mView);前调用以下代码
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
作者:帅得不敢出门