Android PhoneWindowManager監(jiān)聽屏幕右側(cè)向左滑動實現(xiàn)返回功能
由于項目沒有設(shè)計返回鍵,一旦進(jìn)入別的應(yīng)用,就無法回到桌面。只能通過串口輸入input keyevent 4(返回鍵)來返回桌面,為了方便調(diào)試,在Framework 中監(jiān)聽手勢,實現(xiàn)返回功能。
在frameworks\base\services\core\java\com\android\server\policy\PhoneWindowManager中有這么一段代碼
mSystemGestures = new SystemGesturesPointerEventListener(context, new SystemGesturesPointerEventListener.Callbacks() { @Override public void onSwipeFromTop() { Log.i("gyx","onSwipeFromTop"); if (mStatusBar != null) { requestTransientBars(mStatusBar); } } @Override public void onSwipeFromBottom() { Log.i("gyx","onSwipeFromBottom"); if (mNavigationBar != null && mNavigationBarPosition == NAV_BAR_BOTTOM) { requestTransientBars(mNavigationBar); } } @Override public void onSwipeFromRight() { Log.i("gyx","onSwipeFromRight"); sendKeyCode(4); Log.i("gyx","sendKeyCode 4"); if (mNavigationBar != null && mNavigationBarPosition == NAV_BAR_RIGHT) { requestTransientBars(mNavigationBar); } } @Override public void onSwipeFromLeft() { Log.i("gyx","onSwipeFromLeft"); if (mNavigationBar != null && mNavigationBarPosition == NAV_BAR_LEFT) { requestTransientBars(mNavigationBar); } } @Override public void onFling(int duration) { if (mPowerManagerInternal != null) { mPowerManagerInternal.powerHint( PowerHint.INTERACTION, duration); } } @Override public void onDebug() { // no-op } @Override public void onDown() { mOrientationListener.onTouchStart(); } @Override public void onUpOrCancel() { mOrientationListener.onTouchEnd(); } @Override public void onMouseHoverAtTop() { mHandler.removeMessages(MSG_REQUEST_TRANSIENT_BARS); Message msg = mHandler.obtainMessage(MSG_REQUEST_TRANSIENT_BARS); msg.arg1 = MSG_REQUEST_TRANSIENT_BARS_ARG_STATUS; mHandler.sendMessageDelayed(msg, 500); } @Override public void onMouseHoverAtBottom() { mHandler.removeMessages(MSG_REQUEST_TRANSIENT_BARS); Message msg = mHandler.obtainMessage(MSG_REQUEST_TRANSIENT_BARS); msg.arg1 = MSG_REQUEST_TRANSIENT_BARS_ARG_NAVIGATION; mHandler.sendMessageDelayed(msg, 500); } @Override public void onMouseLeaveFromEdge() { mHandler.removeMessages(MSG_REQUEST_TRANSIENT_BARS); } });
代碼中監(jiān)聽了手勢操作,其中onSwipeFromRight()
就是當(dāng)從屏幕的右側(cè)向左滑動時會觸發(fā),只要在這里加入返回的功能即可;
實現(xiàn)返回按鍵的功能代碼如下
private void sendKeyCode(final int keyCode) { new Thread(new Runnable() { @Override public void run() { try { // 創(chuàng)建一個Instrumentation對象 Instrumentation inst = new Instrumentation(); // 調(diào)用inst對象的按鍵模擬方法 inst.sendKeyDownUpSync(keyCode); } catch (Exception e) { e.printStackTrace(); } } }).start(); }
總結(jié)
到此這篇關(guān)于Android PhoneWindowManager監(jiān)聽屏幕右側(cè)向左滑動實現(xiàn)返回功能的文章就介紹到這了,更多相關(guān)Android PhoneWindowManager監(jiān)聽屏幕右側(cè)向左滑動實現(xiàn)返回功能內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
ANDROID BottomNavigationBar底部導(dǎo)航欄的實現(xiàn)示例
本篇文章主要介紹了ANDROID BottomNavigationBar底部導(dǎo)航欄的實現(xiàn)示例,非常具有實用價值,需要的朋友可以參考下2017-10-10Android使用DisplayManager創(chuàng)建虛擬屏流程及原理解析
這篇文章主要介紹了Android使用DisplayManager創(chuàng)建虛擬屏流程及原理解析,DisplayManager提供了createVirtualDisplay接口,用于創(chuàng)建虛擬屏,虛擬屏可以把屏幕分出不同的區(qū)域,需要的朋友可以參考下2024-05-05Android開發(fā)之開發(fā)者頭條APP(三)實現(xiàn)首頁
這篇文章主要介紹了Android開發(fā)之開發(fā)者頭條APP(三)實現(xiàn)首頁的相關(guān)資料,需要的朋友可以參考下2016-04-04Android編程單選項框RadioGroup綜合應(yīng)用示例
這篇文章主要介紹了Android編程單選項框RadioGroup用法,結(jié)合實例形式分析了Android單選按鈕組RadioGroup的定義與具體使用技巧,需要的朋友可以參考下2016-10-10Android ConstraintLayout約束布局使用詳解
ConstraintLayout 即約束布局,也是 Android Studio 的默認(rèn)布局,它可以減少布局的層級,改善布局性能。不夸張地說,它基本上可以實現(xiàn)任何你想要的布局效果,下面,咱們一起來瞧瞧吧2022-11-11淺談Android開發(fā)系列網(wǎng)絡(luò)篇之Retrofit
這篇文章主要介紹了淺談Android開發(fā)系列網(wǎng)絡(luò)篇之Retrofit,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2016-12-12