2013-08-07 5 views
16

Ich frage mich, wie ich feststellen könnte, ob mein eigener Dienst aktiviert ist. So konnte ich überprüfen, ob mein Dienst nicht aktiviert ist, und dann den Benutzer anweisen, ihn zu aktivieren.Ermitteln, ob mein Erreichbarkeitsdienst aktiviert ist

Dank

+0

Mögliche Duplikate von [Android: Wie überprüfen Sie, ob ein bestimmter AccessibilityService aktiviert ist] (http://stackoverflow.com/questions/5081145/android-how-do-you-check-if-a-particular-accessibilityservice -is-enabled) – Sam

Antwort

49

Unten ist die Methode zu überprüfen, ob Ihre Erreichbarkeit Dienst aktiviert ist oder nicht.

Hinweis: Ändern Sie den Wert YOURAccessibilityService mit Ihrem Service.

// 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; 
} 

Und diese Methode zu nennen:

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

Dies wird überprüfen und Zugänglichkeit Einstellungen starten, wenn nicht aktiviert.

+0

Arbeiten wie ein Charme, danke –

+0

@Pankaj was ist, wenn die getint-Methode die Einstellungen nicht gefunden Ausnahme wirft. Was können wir in diesem Fall tun? Ich habe es auf KITKAT Emulator versucht und es wirft diese Einstellungen nicht gefunden Ausnahme aber Einstellung ist da. Gibt es eine andere Methode, die wir in diesem Fall verwenden können? – dirtydexter

+0

Danke, funktioniert wie erwartet. Es ist besser, getPackageName() am Ende der Zeile zu verwenden. String service = mContext.getPackageName() + "/" + mContext.getPackageName() + ".IhrAccessibilityService"; – user207064