I want to simulate all physical buttons of our Android devices.
So is there a way to simulate:
- BACK BUTTON
- HOME BUTTON
- MENU BUTTON
- SEARCH BUTTON
- TASK BUTTON
- VOLUME (+ AND -) BUTTONS
I want to simulate all physical buttons of our Android devices.
So is there a way to simulate:
Create a KeyEvent and publish it.
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);
activity.onBackPressed
method btw... –
Poultryman You can simulate pressing buttons even your app is closed, but you'll need Accessibility permission:
Create service extended from 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)
}
}
Call doAction()
where you want action
Add to 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" />
for more info look at https://developer.android.com/guide/topics/ui/accessibility/services.html
If you test your application's specific component such as Activity
so you may use InstrumentationTestCase
's sendKeys()
method, passing there any combination of keys. Also you can use TouchUtils
to simulate tapping, dragging and clicking actions
Use onKeyListener
for overriding the physical buttons in your device. See the doc.
The KeyEvent class have all the values for the physical buttons and on screen keyboard on your device. For Example KeyEvent.KEYCODE_HOME
substitutes for the home button in the device.
Google it, you can find a lot of examples for KEYCODE
events
Simulation for following keys:
-BACK BUTTON : override onBackPressed() in current activity.
-MENU BUTTON : you should look here and also openOptionsMenu(), menu
you should also look at this blog.
Try this your activity
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)
{
}
}
© 2022 - 2024 — McMap. All rights reserved.