Android 通过编程方式调用硬件返回按钮?

Android 通过编程方式调用硬件返回按钮?,android,Android,我知道在Android中可以覆盖后退按钮功能,但我想知道是否有一种方法或任何我可以调用的东西在功能上与按下硬件按钮相同 您可以像这样向系统发送后退按钮 this.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK)); 或者,您也可以覆盖“后退”按钮并拨打电话 finish(); 关于你的活动。这与通用的后退按钮基本相同。只需调用this.onBackPressed()在活动中。如果您只想“按”

我知道在Android中可以覆盖后退按钮功能,但我想知道是否有一种方法或任何我可以调用的东西在功能上与按下硬件按钮相同

您可以像这样向系统发送后退按钮

this.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK)); 
或者,您也可以覆盖“后退”按钮并拨打电话

finish();

关于你的活动。这与通用的后退按钮基本相同。

只需调用
this.onBackPressed()在活动中。

如果您只想“按”硬件按钮, 创建从
可访问性服务扩展的服务

class ExampleAccessService:AccessibilityService() {
    override fun onInterrupt() {
    }

    override fun onAccessibilityEvent(event: AccessibilityEvent?) {
    }
    
    fun doAction(){
        performGlobalAction(GLOBAL_ACTION_RECENTS)
//        performGlobalAction(GLOBAL_ACTION_BACK)
//        performGlobalAction(GLOBAL_ACTION_HOME)
//        performGlobalAction(GLOBAL_ACTION_NOTIFICATIONS)
//        performGlobalAction(GLOBAL_ACTION_POWER_DIALOG)
//        performGlobalAction(GLOBAL_ACTION_QUICK_SETTINGS)
//        performGlobalAction(GLOBAL_ACTION_TOGGLE_SPLIT_SCREEN)
    }
}
在需要操作的位置调用
doAction()

添加到清单

<application
...
    <service
        android:name=".ExampleAccessService"
        android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"
        android:label="Name of servise" // it will be viewed in Settings->Accessibility->Services
        android:enabled="true"
        android:exported="false" >
        <intent-filter>
            <action android:name="android.accessibilityservice.AccessibilityService"/>
        </intent-filter>
        <meta-data
            android:name="android.accessibilityservice"
            android:resource="@xml/accessibility_service_config"/>
    </service>
...
</application>

在我的代码中不起作用…告诉我将其更改为ACTION\u DOWN,并且KEYCODE\u BACK不存在,我需要导入什么才能找到它们?尝试使用KeyEvent.ACTION\u DOWN和KeyEvent.KEYCODE\u BACK:)谢谢@jimmithy我更新了解决方案。希望这是你想要的正确答案:)这对我不起作用。但是发现了其他人可能也会觉得有用的解决方法:dispatchKeyEvent(newKeyEvent(KeyEvent.ACTION\u DOWN,KeyEvent.KEYCODE\u BACK));dispatchKeyEvent(新的KeyEvent(KeyEvent.ACTION\u UP,KeyEvent.KEYCODE\u BACK));这并不完全正确。当按下按钮然后再向上按下时,您实际上是在发送一个按键事件。您是否尝试删除ACTION_DOWN事件并查看它是否仍然有效?这是一个很好的答案。这是最好的答案,因为简单地调用finish不会像真正的back按钮那样在Backpress时触发。如果活动在那里做额外的事情,它将被忽略。但是就像在活动上有任何对话框一样,它将关闭活动,而real button不会这样做。@NehaK在这种情况下,如果对话框正在显示,您可以覆盖onBackPressed(),然后先关闭它。
<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
    android:accessibilityEventTypes="typeAllMask"
    android:accessibilityFeedbackType="feedbackAllMask"
    android:accessibilityFlags="flagDefault"
    android:canRetrieveWindowContent="false"
    android:description="your description"
    android:notificationTimeout="100"
    android:packageNames="your app package, ex: ex: com.example.android"
    android:settingsActivity="your settings activity ex: com.example.android.MainActivity" />