Android PhoneWindowManager監(jiān)聽屏幕右側(cè)向左滑動(dòng)實(shí)現(xiàn)返回功能
由于項(xiàng)目沒有設(shè)計(jì)返回鍵,一旦進(jìn)入別的應(yīng)用,就無法回到桌面。只能通過串口輸入input keyevent 4(返回鍵)來返回桌面,為了方便調(diào)試,在Framework 中監(jiān)聽手勢(shì),實(shí)現(xiàn)返回功能。
在frameworksbaseservicescorejavacomandroidserverpolicyPhoneWindowManager中有這么一段代碼
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)聽了手勢(shì)操作,其中onSwipeFromRight()就是當(dāng)從屏幕的右側(cè)向左滑動(dòng)時(shí)會(huì)觸發(fā),只要在這里加入返回的功能即可;
實(shí)現(xiàn)返回按鍵的功能代碼如下
private void sendKeyCode(final int keyCode) { new Thread(new Runnable() { @Override public void run() {try { // 創(chuàng)建一個(gè)Instrumentation對(duì)象 Instrumentation inst = new Instrumentation(); // 調(diào)用inst對(duì)象的按鍵模擬方法 inst.sendKeyDownUpSync(keyCode);} catch (Exception e) { e.printStackTrace();} } }).start(); }
總結(jié)
到此這篇關(guān)于Android PhoneWindowManager監(jiān)聽屏幕右側(cè)向左滑動(dòng)實(shí)現(xiàn)返回功能的文章就介紹到這了,更多相關(guān)Android PhoneWindowManager監(jiān)聽屏幕右側(cè)向左滑動(dòng)實(shí)現(xiàn)返回功能內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. Django使用HTTP協(xié)議向服務(wù)器傳參方式小結(jié)2. ASP.NET MVC遍歷驗(yàn)證ModelState的錯(cuò)誤信息3. PHP用代碼實(shí)現(xiàn)文件下載4. 深入理解Android熱修復(fù)技術(shù)原理之資源熱修復(fù)技術(shù)5. 用JS實(shí)現(xiàn)飛機(jī)大戰(zhàn)小游戲6. 使用spring oauth2框架獲取當(dāng)前登錄用戶信息的實(shí)現(xiàn)代碼7. Vue+Spring Boot簡單用戶登錄(附Demo)8. PHP PDO 學(xué)習(xí)筆記9. java獲取文件編碼,jsoup獲取html純文本操作10. ASP.NET MVC使用typeahead.js實(shí)現(xiàn)輸入智能提示功能
