pao*_*988 4 service binding android accessibilityservice
在我的应用程序中有一个Service和一个AccessibilityService.现在Service受可访问性服务的约束,以便接收信息.
我会Service定期检查是否AccessibilityService已启用,如果未启用,则会向用户发送通知,表明它必须启用它.
启用后,即可AccessibilityService开始工作.首先,它绑定到我Service,之后,它开始发送信息.
问题是如果AccessibilityService崩溃了.它仍然启用但没有正在运行的实例.所以我Service发现它已启用,但实际上AccessibilityService它没有运行.
怎么检查 AccessibilityService
public boolean checkAccesibilityService()
{
int accessibilityEnabled = 0;
boolean accessibilityFound = false;
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());
}
if (accessibilityEnabled == 1) {
//Log.v(TAG, "***ACCESSIBILIY IS ENABLED*** -----------------");
String settingValue = Settings.Secure.getString(
mContext.getApplicationContext().getContentResolver(),
Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES);
if (settingValue != null) {
if(TextUtils.isEmpty(settingValue)) {
Log.i(TAG, "Nessun servizio abilitato!");
return false;
}
TextUtils.SimpleStringSplitter splitter = new TextUtils.SimpleStringSplitter(':');
splitter.setString(settingValue);
while (splitter.hasNext()) {
String accessabilityService = splitter.next();
//Log.v(TAG, "-------------- > accessabilityService :: " + accessabilityService);
if (accessabilityService.equalsIgnoreCase(ACCESSIBILITY_SERVCE)) {
//Log.v(TAG, "Accessibility Service Attivato!");
return true;
}
}
Log.v(TAG, "Accesibility Service non abilitato!");
return false;
}
} else {
Log.v(TAG, "***ACCESSIBILIY IS DISABLED***");
}
return accessibilityFound;
}
Run Code Online (Sandbox Code Playgroud)
Q1:为什么当AccessibilityService崩溃导致Android操作系统无法重启?
Q2:我可以更改我的代码以检查是否AccessibilityService已启用但是还有一个正在运行的实例?
AccessibilityService崩溃导致Android操作系统无法重启?我不知道,但我怀疑你能做的事情并不多.我有类似的问题AccessibilityService,所以我认为这是正常的行为.我能想到的最好的是:
AccessibilityService代码并对其进行彻底测试,使其不包含任何会导致其崩溃的错误.AccessibilityService你可以在不同的地方做的逻辑.你工作的工作越少AccessibilityService,越简单,因此产生错误的可能性就越小.AccessibilityService代码容错.预测将在服务内部发生的错误,并编写代码以捕获它们并从中恢复,以便在AccessibilityService可能的情况下继续正常运行.AccessibilityService在自己的进程中运行,以便在其他代码崩溃时不会被杀死.请注意,这可能很难,具体取决于服务如何与代码的其余部分进行交互.是; 有几种常见的技术可以做到这一点.请参阅如何检查Android上是否正在运行服务?.
| 归档时间: |
|
| 查看次数: |
2035 次 |
| 最近记录: |