我想模拟Android设备的所有物理按钮。
有没有办法模拟:
答案 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)
{
}
}