У меня есть приложение, которое использует службу доступности для мониторинга событий. Он всегда работал отлично в версиях android до ICS, но с Jelly bean. Мне не очень повезло.
Как упоминалось в документах, я добавил
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"
к моей службе в файле манифеста. Это заставляет приложение работать нормально, используя декларативный xml-метод для xml.
Проблема заключается в обратной совместимости. Для таких версий, как пряники, я получаю следующую ошибку:
07-15 22:15:56.090: E/ACRA(1168): Caused by: java.lang.SecurityException: Not allowed to start service Intent { cmp=com.example/.MainRunningService (has extras) } without permission android.permission.BIND_ACCESSIBILITY_SERVICE
Я обновил до последней версии баночки совместимости, которая может помочь, но все равно получить ошибку.
Я не уверен, как получить совместимость между более старыми и новыми версиями.
Если я удалю BIND_ACCESSIBILITY_SERVICE из манифеста, мое приложение не будет показано в Jelly Bean, чтобы иметь возможность переключать доступность. Какие-либо предложения?
хорошо, Марк Мэрфи предложил несколько бит для меня, и это то, что сработало.
Подкласс класса обслуживания, поэтому есть 2 версии.
Затем добавьте файл bools.xml в каталог res/values, а также в каталоге res/values-v16
Имейте значение is_jelly_bean boolean для true в v16 и is_not_jelly_bean в каталоге res/values.
Тогда в манифесте есть что-то вроде этого
<service android:name=".service.MainRunningService" android:enabled="@bool/is_jelly_bean"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
<intent-filter >
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
<meta-data
android:name="android.accessibilityservice"
android:resource="@xml/accessibilityservice" />
</service>
<service android:name=".service.MainRunningServicePreJellyBean"
android:enabled="@bool/is_not_jelly_bean">
<intent-filter >
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
<meta-data
android:name="android.accessibilityservice"
android:resource="@xml/accessibilityservice" />
</service>