2013-08-07 39 views
16

Tôi đã tự hỏi làm thế nào tôi có thể phát hiện nếu dịch vụ của riêng tôi được bật. Vì vậy, tôi có thể kiểm tra xem dịch vụ của tôi có được kích hoạt không, sau đó yêu cầu người dùng bật tính năng này.Phát hiện nếu dịch vụ trợ năng của tôi được bật

Cảm ơn

+0

Bản sao có thể có của [Android: Làm thế nào để bạn kiểm tra xem một AccessibilityService cụ thể có được bật hay không] (http://stackoverflow.com/questions/5081145/android-how-do-you-check-if-a-particular-accessibilityservice -kích hoạt) – Sam

Trả lời

49

Dưới đây là phương pháp để kiểm tra xem dịch vụ trợ năng của bạn có được bật hay không.

Lưu ý: Thay đổi giá trị YOURAccessibilityService bằng Dịch vụ của bạn.

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

Và để gọi phương pháp này:

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

này sẽ kiểm tra và khởi động các thiết lập khả năng tiếp cận nếu không được kích hoạt.

+0

Làm việc như một sự quyến rũ, cảm ơn bạn –

+0

@Pankaj nếu phương pháp getint là ném các thiết lập không tìm thấy ngoại lệ. chúng ta có thể làm gì trong trường hợp đó. Tôi đã thử nó trên KITKAT giả lập và nó ném cài đặt này không tìm thấy ngoại lệ nhưng thiết lập là có. Có một số phương pháp khác mà chúng ta có thể sử dụng trong trường hợp này không. – dirtydexter

+0

Xin cảm ơn, hãy làm việc như mong đợi. Tốt hơn nên sử dụng getPackageName() tại dòng cuối cùng Chuỗi dịch vụ = mContext.getPackageName() + "/" + mContext.getPackageName() + ".YourAccessibilityService"; – user207064