Почему не запоминает что accessbility сервис включен?

Проблема заключается в следующем, при первом старте приложения, перенаправляет в настройки для включения сервиса и после возвращения в активность у нас стартует сам сервис, здесь происходит все как нужно. Но стоит открыть приложение повторно, нас снова перебрасывает на страницу настроек где сервис уже включен, за месть того что бы просто запустить сам сервис

Вот MainActivity

package com.arturio.accessbility;

import android.accessibilityservice.AccessibilityService;
import android.accessibilityservice.AccessibilityServiceInfo;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
import android.view.accessibility.AccessibilityManager;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import java.util.List;

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";
    private static final String PREFS_NAME = "AccessibilityPrefs";
    private static final String KEY_SERVICE_ENABLED = "service_enabled";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if (isAccessibilityServiceEnabled(this, MyAccessibilityService.class)) {
            Log.d(TAG, "Accessibility Service уже включен");
            Toast.makeText(this, "Accessibility Service уже включен", Toast.LENGTH_SHORT).show();
        } else {
            if (!isAccessibilityServiceEnabled(this, MyAccessibilityService.class)) {
                Log.d(TAG, "Accessibility Service не включен, перенаправление...");
                Toast.makeText(this, "Включите Accessibility Service", Toast.LENGTH_SHORT).show();
                startActivity(new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS));
            } else {
                Log.d(TAG, "Accessibility Service уже включен");
                Toast.makeText(this, "Accessibility Service уже включен", Toast.LENGTH_SHORT).show();
            }

        }
    }

    private boolean isAccessibilityServiceEnabled(Context context, Class<? extends AccessibilityService> service) {
        AccessibilityManager am = (AccessibilityManager) context.getSystemService(Context.ACCESSIBILITY_SERVICE);
        List<AccessibilityServiceInfo> enabledServices = am.getEnabledAccessibilityServiceList(AccessibilityServiceInfo.FEEDBACK_ALL_MASK);
        for (AccessibilityServiceInfo enabledService : enabledServices) {
            if (enabledService.getId().endsWith(service.getName())) {
                return true;
            }
        }
        return false;
    }

}

Вот сервис MyAccessibilityService

package com.arturio.accessbility;

import android.accessibilityservice.AccessibilityService;
import android.accessibilityservice.AccessibilityServiceInfo;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.provider.Settings;
import android.util.Log;
import android.view.accessibility.AccessibilityEvent;
import android.widget.Toast;

public class MyAccessibilityService extends AccessibilityService {
    private static final String TAG = "MyAccessibilityService";
    private static final String PREFS_NAME = "AccessibilityPrefs";
    private static final String KEY_SERVICE_ENABLED = "service_enabled";

    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {
        Log.d(TAG, "Accessibility Event: " + event.getEventType());
    }

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

    @Override
    protected void onServiceConnected() {
        super.onServiceConnected();
        Log.d(TAG, "Accessibility Service Connected");
        Toast.makeText(this, "Accessibility Service Started", Toast.LENGTH_SHORT).show();

        SharedPreferences prefs = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
        prefs.edit().putBoolean(KEY_SERVICE_ENABLED, true).apply();
    }
}

Не смотря на то что я получаю Accessibility Service уже включен, при перезагрузке приложения в настройках у меня он почему то отключен. Как это можно решить?


Ответы (0 шт):