2013-08-07 12 views
16

Mi chiedevo come potrei rilevare se il mio servizio è abilitato. Quindi potrei verificare se il mio servizio non è abilitato, quindi dire all'utente di abilitarlo.Rileva se il mio servizio di accessibilità è abilitato

Grazie

+0

Possibile duplicato di [Android: come si controlla se un particolare AccessibilityService è abilitato] (http://stackoverflow.com/questions/5081145/android-how-do-you-check-if-a-particular-accessibilityservice -è abilitato) – Sam

risposta

49

Di seguito è riportato il metodo per verificare se il servizio di accessibilità è abilitato o meno.

Nota: Modificare il valore di YOURAccessibilityService con il servizio.

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

E chiamare questo metodo:

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

Questo controllerà e lanciare le impostazioni di accessibilità se non abilitato.

+0

Funzionando come un fascino, grazie –

+0

@Pankaj e se il metodo getint sta lanciando le impostazioni non trovato eccezione. cosa possiamo fare in quel caso. L'ho provato con l'emulatore KITKAT e lancia questa eccezione di Impostazioni non trovata, ma l'impostazione è lì. C'è qualche altro metodo che possiamo usare in questo caso. – dirtydexter

+0

Grazie, come previsto. È preferibile utilizzare getPackageName() alla riga finale String service = mContext.getPackageName() + "/" + mContext.getPackageName() + ".YourAccessibilityService"; – user207064