'AccessibilityService not geting key event on softkey back,home button

My AccessibilityService work fine for physical back,home. but if user have device with soft navigation key (like nexus 4 ) it will not return key event here is my code : my goal is to block back and home button action, any idea how i can do it?

Accessibility_Service.java

public class Accessibility_Service extends AccessibilityService {
    private SharedPreferences prefs;
    private String TAG = "Accessibility_Service";
    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {

        Log.d(TAG,"AccessibilityEvent: "+event.toString());
    }

    @Override
    public void onInterrupt() {
        Log.d(TAG,"onInterrupt: ");
    }

    @Override
    protected boolean onKeyEvent(KeyEvent event) {
        try {
            Log.d(TAG,"key: "+event.getKeyCode());
            if (prefs.getBoolean(MyStandout.IS_RUNNNING_PREF, false)) {
                if (handerEvent(event)) {
                    return true;
                }
            }else {
                Log.d(TAG,"standOutNotRuning");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return super.onKeyEvent(event);
    }

    @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR2)
    @Override
    protected void onServiceConnected() {
        prefs = getSharedPreferences(MyStandout.MY_PREFS_NAME, MODE_PRIVATE);
        AccessibilityServiceInfo tempInfo = getServiceInfo();
        tempInfo.flags |= AccessibilityServiceInfo.FLAG_REQUEST_FILTER_KEY_EVENTS;
        tempInfo.flags |= AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS;
        tempInfo.flags |= AccessibilityServiceInfo.FLAG_REQUEST_TOUCH_EXPLORATION_MODE;

        setServiceInfo(tempInfo);

    }

config.xml

<accessibility-service

    android:accessibilityFlags="flagRequestFilterKeyEvents|flagIncludeNotImportantViews|flagRequestTouchExplorationMode"
    android:description="@string/accessibility_service_description"
    android:settingsActivity="com.example.ameerhamza.lockscreentouch.Accessibility_Service"
    android:canRequestFilterKeyEvents="true"
    xmlns:android="http://schemas.android.com/apk/res/android"
    />

manifast

<service
            android:name="com.example.ameerhamza.lockscreentouch.Accessibility_Service"
            android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
            <intent-filter>
                <action android:name="android.accessibilityservice.AccessibilityService" />
            </intent-filter>

            <meta-data
                android:name="android.accessibilityservice"
                android:resource="@xml/serviceconfig" />
        </service>


Solution 1:[1]

In this code you can check back click. Its work for me :

Home click:

  if (event.packageName == "com.android.systemui") {
        if (event.contentDescription.trim() == "Home") {
            // do something
        }
    }

Back click:

  if (event.packageName == "com.android.systemui") {
        if (event.contentDescription.trim() == "Back") {
            // do something
        }
    }

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 amir