需求:
隐藏系统导航栏,从底部向上滑动模拟导航键(back,home,recent).
左边滑动模拟back键
中间滑动模拟home键
右边滑动模拟recent键
实现方案:
1.隐藏导航键不能关闭导航栏开关,将导航栏高度改成0.
2.通过滑动坐标实现.
frameworks/base/services/core/java/com/android/server/wm/SystemGesturesPointerEventListener.java
// 系统有默认SWIPE_FROM_BOTTOM ;需要获取x坐标和y坐标
if (fromY >= screenHeight - mSwipeStartThreshold
&& y < fromY - mSwipeDistanceThreshold
- && elapsed < SWIPE_TIMEOUT_MS) {
+ && elapsed < SWIPE_TIMEOUT_MS) {
+ if(fromY >1100 && fromX <640 ){
+ Log.e("lyl","back ");
+ Instrumentation inst = new Instrumentation();
+ inst.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);
+ }
+ if(fromY >1100 && fromX >=640 && fromX <1280 ){
+ Log.e("lyl","home ");
+ Intent intent= new Intent(Intent.ACTION_MAIN);
+ intent.addCategory(Intent.CATEGORY_HOME);
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_TASK_ON_HOME);
+ mContext.startActivity(intent);
+ }
+ if(fromY >1100 && fromX >=1280 ){
+ Log.e("lyl","recent ");
+ Intent intent = new Intent("com.recent.broadcasereceiver");
+ mContext.sendBroadcast(intent);
+ }
return SWIPE_FROM_BOTTOM;
frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF);
filter.addAction(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_USER_SWITCHED);
+ filter.addAction(Intent.ACTION_USER_PRESENT);
+ filter.addAction("com.recent.broadcasereceiver");
getContext().registerReceiverAsUser(mBroadcastReceiver, UserHandle.ALL, filter, null, null);
notifyNavigationBarScreenOn();
@@ -1119,6 +1121,18 @@ public class NavigationBarFragment extends LifecycleFragment implements Callback
// The accessibility settings may be different for the new user
updateAccessibilityServicesState(mAccessibilityManager);
}
+ if("com.recent.broadcasereceiver".equals(action)){// recent键功能
+ mStatusBar.awakenDreams();
+ mCommandQueue.toggleRecentApps();
+ }
}
};