【问题标题】:AccessibilityService not geting key event on softkey back,home button辅助功能服务未在软键返回、主页按钮上获取关键事件
【发布时间】:2022-04-19 14:45:38
【问题描述】:

我的 AccessibilityService 可以正常使用物理支持,回家。但是如果用户有 带有软导航键的设备(如 nexus 4)它不会返回键事件这是我的代码:我的目标是阻止返回和主页按钮操作,知道我该怎么做吗?

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"
    />

清单

<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>

【问题讨论】:

  • 对此的任何更新。我也卡住了
  • 不,我只是检测用户是否有软按钮,然后我隐藏那个软按钮
  • 你能指导我,如何隐藏软按钮?
  • 到目前为止有什么解决方案吗?

标签: android accessibility accessibilityservice


【解决方案1】:

在此代码中,您可以检查返回点击。 它对我有用:

主页点击:

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

后退点击:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多