如何模拟主页,后退,菜单,搜索,任务和音量按钮?

时间:2012-12-14 09:54:09

标签: android android-homebutton

我想模拟Android设备的所有物理按钮。

有没有办法模拟:

  • BACK BUTTON
  • HOME BUTTON
  • MENU BUTTON
  • 搜索按钮
  • TASK BUTTON
  • 音量(+和 - )按钮

7 个答案:

答案 0 :(得分:16)

创建一个KeyEvent并发布它。

KeyEvent kdown = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK);
Activity.dispatchKeyEvent(kdown);
KeyEvent kup = new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK);
Activity.dispatchKeyEvent(kup);

答案 1 :(得分:0)

如果您测试应用程序的特定组件,例如Activity,那么您可以使用InstrumentationTestCase的{​​{3}}方法,并传递任意组合键。您还可以使用sendKeys()来模拟点击,拖动和点击操作

答案 2 :(得分:0)

模拟以下键:

-BACK BUTTON:在当前活动中覆盖onBackPressed()。

-MENU BUTTON:您应该看here以及openOptionsMenu(),menu

你还应该看看this博客。

答案 3 :(得分:0)

即使您的应用已关闭,您也可以模拟按下按钮,但您需要辅助功能权限:

创建从AccessibilityService扩展的服务:

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()

添加到Manifest

<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>

<强> accessibility_service_config.xml:

<?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" />

了解更多信息,请查看https://developer.android.com/guide/topics/ui/accessibility/services.html

答案 4 :(得分:0)

尝试使用android dispatchKeyEvent覆盖方法。

答案 5 :(得分:-1)

使用onKeyListener覆盖设备中的物理按钮。请参阅doc

KeyEvent类具有设备上物理按钮和屏幕键盘的所有值。例如,KeyEvent.KEYCODE_HOME替换设备中的主页按钮。

谷歌,你可以找到很多KEYCODE事件的例子

答案 6 :(得分:-1)

试试这个你的活动

public boolean onKeyDown(int keyCode, KeyEvent event)   
{
 if (keyCode == KeyEvent.KEYCODE_BACK)
 {

 }
 if (keyCode == KeyEvent.KEYCODE_HOME)
 {

 }
 if (keyCode == KeyEvent.KEYCODE_MENU)
 {

 }
 if (keyCode == KeyEvent.KEYCODE_VOLUME_UP)
 {

 }
 if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN)
 {

 }
}