Почему не запоминает что 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 уже включен, при перезагрузке приложения в настройках у меня он почему то отключен. Как это можно решить?