2013-08-07 48 views
16

我想知道如何檢測我的服務是否啓用。所以我可以檢查我的服務是否未啓用,然後告訴用戶啓用它。檢測我的無障礙服務是否啓用

謝謝

+0

可能的[Android的重複:如何檢查特定的AccessibilityService是否啓用](http://stackoverflow.com/questions/5081145/android-how-do-you-check-if-a-particular-accessibilityservice -is-enabled) – Sam

回答

49

以下是檢查您的無障礙服務是否啓用的方法。

注意:更改值爲YOURAccessibilityService與您的服務。

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

並調用這個方法:

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

這將檢查,如果沒有啓用啓動輔助功能設置。

+0

像魅力一樣工作,謝謝 –

+0

@Pankaj如果getint方法拋出的設置未找到異常。在這種情況下我們能做些什麼。我在KITKAT模擬器上試了一下,發現這個設置沒有發現異常,但設置在那裏。在這種情況下我們可以使用其他方法嗎? – dirtydexter

+0

謝謝,按預期工作。最好在行最後使用getPackageName()String service = mContext.getPackageName()+「/」+ mContext.getPackageName()+「.YourAccessibilityService」; – user207064