Meroelyth
Meroelyth

Reputation: 5590

How to simulate home, back, menu, search, task and volume buttons?

I want to simulate all physical buttons of our Android devices.

So is there a way to simulate:

Upvotes: 6

Views: 13661

Answers (7)

KalanaChinthaka
KalanaChinthaka

Reputation: 321

Try using android dispatchKeyEvent override method.

Upvotes: 0

Evgenii Vorobei
Evgenii Vorobei

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

Anand Tiwari
Anand Tiwari

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

Aleksander Gralak
Aleksander Gralak

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

Rajesh Rajaram
Rajesh Rajaram

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

Renjith
Renjith

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

Alex Bonel
Alex Bonel

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

Related Questions