日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android从服务检查,android开发分享Android:你如何检查是否启用了特定的AccessibilityService...

發布時間:2024/9/27 Android 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android从服务检查,android开发分享Android:你如何检查是否启用了特定的AccessibilityService... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我最后自己做了這個:

public boolean isAccessibilityEnabled(){ int accessibilityEnabled = 0; final String LIGHTFLOW_ACCESSIBILITY_SERVICE = "com.example.test/com.example.text.ccessibilityService"; boolean accessibilityFound = false; try { accessibilityEnabled = Settings.Secure.getInt(this.getContentResolver(),android.provider.Settings.Secure.ACCESSIBILITY_ENABLED); Log.d(LOGTAG, "ACCESSIBILITY: " + accessibilityEnabled); } catch (SettingNotFoundException e) { Log.d(LOGTAG, "Error finding setting, default accessibility to not found: " + e.getMessage()); } TextUtils.SimpleStringSplitter mStringColonSplitter = new TextUtils.SimpleStringSplitter(':'); if (accessibilityEnabled==1){ Log.d(LOGTAG, "***ACCESSIBILIY IS ENABLED***: "); String settingValue = Settings.Secure.getString(getContentResolver(), Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES); Log.d(LOGTAG, "Setting: " + settingValue); if (settingValue != null) { TextUtils.SimpleStringSplitter splitter = mStringColonSplitter; splitter.setString(settingValue); while (splitter.hasNext()) { String accessabilityService = splitter.next(); Log.d(LOGTAG, "Setting: " + accessabilityService); if (accessabilityService.equalsIgnoreCase(ACCESSIBILITY_SERVICE_NAME)){ Log.d(LOGTAG, "We've found the correct setting - accessibility is switched on!"); return true; } } } Log.d(LOGTAG, "***END***"); } else{ Log.d(LOGTAG, "***ACCESSIBILIY IS DISABLED***"); } return accessibilityFound; }

從API級別14開始,還可以通過AccessibilityManager獲取正在運行的輔助function服務:

public static boolean isAccessibilityEnabled(Context context, String id) { AccessibilityManager am = (AccessibilityManager) context .getSystemService(Context.ACCESSIBILITY_SERVICE); List runningServices = am .getEnabledAccessibilityServiceList(AccessibilityEvent.TYPES_ALL_MASK); for (AccessibilityServiceInfo service : runningServices) { if (id.equals(service.getId())) { return true; } } return false; }

要找出您的和所有安裝的輔助function服務的標識,您可以運行以下代碼片段:

public static void logInstalledAccessiblityServices(Context context) { AccessibilityManager am = (AccessibilityManager) context .getSystemService(Context.ACCESSIBILITY_SERVICE); List runningServices = am .getInstalledAccessibilityServiceList(); for (AccessibilityServiceInfo service : runningServices) { Log.i(TAG, service.getId()); } }

在我的例子中,ID看起來像org.your.package / .YourAccessibilityService。

到目前為止,該方法工作可靠。

檢查服務是否啟用

/** * Based on {@link com.android.settingslib.accessibility.AccessibilityUtils#getEnabledServicesFromSettings(Context,int)} * @see AccessibilityUtils */ public static boolean isAccessibilityServiceEnabled(Context context, Class> accessibilityService) { ComponentName expectedComponentName = new ComponentName(context, accessibilityService); String enabledServicesSetting = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES); if (enabledServicesSetting == null) return false; TextUtils.SimpleStringSplitter colonSplitter = new TextUtils.SimpleStringSplitter(':'); colonSplitter.setString(enabledServicesSetting); while (colonSplitter.hasNext()) { String componentNameString = colonSplitter.next(); ComponentName enabledService = ComponentName.unflattenFromString(componentNameString); if (enabledService != null && enabledService.equals(expectedComponentName)) return true; } return false; }

用法:

boolean enabled = isAccessibilityServiceEnabled(context, MyAccessibilityService.class);

檢測何時啟用或禁用服務

進行callback:

ContentObserver observer = new ContentObserver() { @Override public void onChange(boolean selfChange) { super.onChange(selfChange); boolean accessibilityServiceEnabled = isAccessibilityServiceEnabled(context, MyAccessibilityService.class); //Do something here } };

訂閱:

Uri uri = Settings.Secure.getUriFor(Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES); context.getContentResolver().registerContentObserver(uri, false, observer);

完成后取消訂閱:

context.getContentResolver().unregisterContentObserver(observer);

請注意,這不適用于getEnabledAccessibilityServiceList()方法,因為它的值與Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES值不同步。 這就是為什么我認為使用Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES是一個更好的“一刀切”的方法。

你能跟蹤服務是否正在運行嗎? 如果無障礙服務啟用不應該也運行?

public class MyAccessibilityService extends AccessibilityService{ public static boolean isEnabled = false; @Override public void onServiceConnected() { isEnabled = true; } @Override public void onDestroy(){ isEnabled = false; }

當您的活動服務剛剛開始時獲取ID。 在您的Activity服務OnSeriviceCeonnected后,所有的初始化調用。 用這個…

AccessibilityServiceInfo serviceInfo = this.getServiceInfo(); String accessibilityId = serviceInfo.getId();

需要Jelly Bean API

然后,您可以使用Martin的代碼(isAccessibilityEnabled)來檢查正在運行的服務。

這需要更多的時間

AccessibilityManager am = (AccessibilityManager) context .getSystemService(Context.ACCESSIBILITY_SERVICE);

AccessibilityManager accessibilityManager = (AccessibilityManager)context.getSystemService(Context.ACCESSIBILITY_SERVICE); List runningservice = accessibilityManager.getEnabledAccessibilityServiceList(AccessibilityServiceInfo.FEEDBACK_ALL_MASK); accessibilityManager.addAccessibilityStateChangeListener(new AccessibilityManager.AccessibilityStateChangeListener() { @Override public void onAccessibilityStateChanged(boolean b) { Toast.makeText(MainActivity.this, "permission "+b, Toast.LENGTH_SHORT).show(); } });

Listner會在狀態改變的時候被調用,你可以跟蹤布爾值來檢查權限,這是迄今為止最簡單和最輕的解決scheme來檢查權限

總結

以上是生活随笔為你收集整理的android从服务检查,android开发分享Android:你如何检查是否启用了特定的AccessibilityService...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。