Служба специальных возможностей Android и обратная совместимость

1

У меня есть приложение, которое использует службу доступности для мониторинга событий. Он всегда работал отлично в версиях 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, чтобы иметь возможность переключать доступность. Какие-либо предложения?

Теги:
android-support-library
android-compatibility

1 ответ

3
Лучший ответ

хорошо, Марк Мэрфи предложил несколько бит для меня, и это то, что сработало.

Подкласс класса обслуживания, поэтому есть 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>
  • 0
    Я искал это, спасибо :)
  • 0
    Я не могу заставить его работать под Android 2.3.6, Jelly Bean работает нормально. Я думаю, что служба работает, потому что я вижу 2 службы (одну основную и одну службу доступности, запущенную для моего процесса, но я не получаю никакого onAccessibilityEvent (событие AccessibilityEvent) в соответствии с 2.3.6. Какие-либо предложения? Я хочу получить событие Notification. Jelly bean работает нормально. Спасибо за помощь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню