我想模拟我们 Android 设备的所有物理按钮。
那么有没有办法模拟:
- 返回键
- 主页按钮
- 菜单按钮
- 搜索按钮
- 任务按钮
- 音量(+ 和 -)按钮
我想模拟我们 Android 设备的所有物理按钮。
那么有没有办法模拟:
创建一个 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);
即使您的应用程序已关闭,您也可以模拟按下按钮,但您需要 Accessibility 权限:
创建从以下扩展的服务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>
可访问性_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
如果您测试应用程序的特定组件,例如,Activity
您可以使用InstrumentationTestCase
'sendKeys()
方法,将任意键组合传递给那里。你也可以TouchUtils
用来模拟点击、拖动和点击动作
尝试使用 android dispatchKeyEvent 覆盖方法。
用于onKeyListener
覆盖设备中的物理按钮。请参阅文档。
KeyEvent类具有设备上物理按钮和屏幕键盘的所有值。例如KeyEvent.KEYCODE_HOME
替代设备中的主页按钮。
谷歌一下,你可以找到很多KEYCODE
事件的例子
试试这个你的活动
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)
{
}
}