Android PhoneWindowManager監(jiān)聽屏幕右側向左滑動實現(xiàn)返回功能
由于項目沒有設計返回鍵,一旦進入別的應用,就無法回到桌面。只能通過串口輸入input keyevent 4(返回鍵)來返回桌面,為了方便調試,在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()就是當從屏幕的右側向左滑動時會觸發(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();
// 調用inst對象的按鍵模擬方法
inst.sendKeyDownUpSync(keyCode);
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
總結
到此這篇關于Android PhoneWindowManager監(jiān)聽屏幕右側向左滑動實現(xiàn)返回功能的文章就介紹到這了,更多相關Android PhoneWindowManager監(jiān)聽屏幕右側向左滑動實現(xiàn)返回功能內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
ANDROID BottomNavigationBar底部導航欄的實現(xiàn)示例
本篇文章主要介紹了ANDROID BottomNavigationBar底部導航欄的實現(xiàn)示例,非常具有實用價值,需要的朋友可以參考下2017-10-10
Android使用DisplayManager創(chuàng)建虛擬屏流程及原理解析
這篇文章主要介紹了Android使用DisplayManager創(chuàng)建虛擬屏流程及原理解析,DisplayManager提供了createVirtualDisplay接口,用于創(chuàng)建虛擬屏,虛擬屏可以把屏幕分出不同的區(qū)域,需要的朋友可以參考下2024-05-05
Android開發(fā)之開發(fā)者頭條APP(三)實現(xiàn)首頁
這篇文章主要介紹了Android開發(fā)之開發(fā)者頭條APP(三)實現(xiàn)首頁的相關資料,需要的朋友可以參考下2016-04-04
Android ConstraintLayout約束布局使用詳解
ConstraintLayout 即約束布局,也是 Android Studio 的默認布局,它可以減少布局的層級,改善布局性能。不夸張地說,它基本上可以實現(xiàn)任何你想要的布局效果,下面,咱們一起來瞧瞧吧2022-11-11

