28

自分のサービスが有効になっているかどうかをどのように検出できるのか疑問に思っていました。したがって、サービスが有効になっていないかどうかを確認し、ユーザーに有効にするように指示できます。

4

5 に答える 5

70

以下は、ユーザー補助サービスが有効になっているかどうかを確認する方法です。 

注:の値はYOURAccessibilityServiceサービスで変更してください。 

// To check if service is enabled
private boolean isAccessibilitySettingsOn(Context mContext) {
    int accessibilityEnabled = 0;
    final String service = getPackageName() + "/" + YOURAccessibilityService.class.getCanonicalName();
    try {
        accessibilityEnabled = Settings.Secure.getInt(
                mContext.getApplicationContext().getContentResolver(),
                android.provider.Settings.Secure.ACCESSIBILITY_ENABLED);
        Log.v(TAG, "accessibilityEnabled = " + accessibilityEnabled);
    } catch (Settings.SettingNotFoundException e) {
        Log.e(TAG, "Error finding setting, default accessibility to not found: "
                + e.getMessage());
    }
    TextUtils.SimpleStringSplitter mStringColonSplitter = new TextUtils.SimpleStringSplitter(':');

    if (accessibilityEnabled == 1) {
        Log.v(TAG, "***ACCESSIBILITY IS ENABLED*** -----------------");
        String settingValue = Settings.Secure.getString(
                mContext.getApplicationContext().getContentResolver(),
                Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES);
        if (settingValue != null) {
            mStringColonSplitter.setString(settingValue);
            while (mStringColonSplitter.hasNext()) {
                String accessibilityService = mStringColonSplitter.next();

                Log.v(TAG, "-------------- > accessibilityService :: " + accessibilityService + " " + service);
                if (accessibilityService.equalsIgnoreCase(service)) {
                    Log.v(TAG, "We've found the correct setting - accessibility is switched on!");
                    return true;
                }
            }
        }
    } else {
        Log.v(TAG, "***ACCESSIBILITY IS DISABLED***");
    }

    return false;
}

そして、このメソッドを呼び出すには:

if (!isAccessibilitySettingsOn(getApplicationContext())) {
    startActivity(new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS));
}

有効になっていない場合、これによりアクセシビリティ設定がチェックされ、起動されます。

于 2013-08-07T05:24:26.707 に答える
0

1:Kotlin ベースの回答 2:現在のパッケージ名のチェックを追加し、現在のパッケージでアクセシビリティ サービスが有効になっている場合にのみ true を返すようにしました。

  private fun checkAccessibilityPermission(): Boolean {
            var isAccessibilityEnabled = false
            (requireActivity().getSystemService(Context.ACCESSIBILITY_SERVICE) as AccessibilityManager).apply {
                installedAccessibilityServiceList.forEach { installedService ->
                    installedService.resolveInfo.serviceInfo.apply {
                        if (getEnabledAccessibilityServiceList(AccessibilityServiceInfo.FEEDBACK_ALL_MASK).any { it.resolveInfo.serviceInfo.packageName == packageName && it.resolveInfo.serviceInfo.name == name && permission == Manifest.permission.BIND_ACCESSIBILITY_SERVICE && it.resolveInfo.serviceInfo.packageName == requireActivity().packageName })
                            isAccessibilityEnabled = true
                    }
                }
            }
            if (isAccessibilityEnabled.not())
                startActivity(Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS).apply {
                    flags = Intent.FLAG_ACTIVITY_NEW_TASK
                })
            return isAccessibilityEnabled
        }
于 2021-11-01T13:54:42.773 に答える