2013-08-07 21 views
16

Kendi hizmetimin etkin olup olmadığını nasıl algılayabileceğimi merak ediyorum. Böylece hizmetimin etkin olup olmadığını kontrol edebilirdim, sonra kullanıcıya bunu etkinleştirmesini söyle.Erişilebilirlik hizmetimin etkin olup olmadığını algıla

Teşekkür

+0

Olası kopyası [Android: Belli bir Erişilebilirlik Hizmeti'nin etkin olup olmadığını nasıl kontrol edersiniz?] (Http://stackoverflow.com/questions/5081145/android-how-do-you-check-if-a-particular-accessibilityservice -is-etkin) – Sam

cevap

49

Aşağıda erişilebilirlik hizmeti etkin olup olmadığını kontrol etmek için bir yöntemdir.

Not: Hizmetinizle birlikte YOURAccessibilityService değerini değiştirin.

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

Ve bu yöntemi çağırmak için:

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

Bu kontrol etmek ve etkin değilse erişilebilirlik ayarları başlatacak.

+0

Bir çekicilik gibi çalışıyorum, –

+0

@Pankaj, getint yöntemi ayarlarda istisna atarsa ​​ne olur. bu durumda ne yapabiliriz. KITKAT emülatöründe denedim ve bu ayar istisnasını alamıyor ama ayar var. Bu durumda kullanabileceğimiz başka bir yöntem var mı? – dirtydexter

+0

Teşekkürler, beklendiği gibi çalışıyor. GetPackageName() satır satırında kullanmak daha iyidir String service = mContext.getPackageName() + "/" + mContext.getPackageName() + ".YourAccessibilityService"; – user207064

İlgili konular