Reputation: 5590
I want to simulate all physical buttons of our Android devices.
So is there a way to simulate:
Upvotes: 6
Views: 13661
Reputation: 1559
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
Upvotes: 3
Reputation: 1598
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.
Upvotes: -1
Reputation: 1509
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);
Upvotes: 17
Reputation: 3277
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)
{
}
}
Upvotes: -2
Reputation: 5803
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
Upvotes: -1
Reputation: 1424
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
Upvotes: 0