1

我有一个使用无障碍服务来监控事件的应用程序。在 ICS 之前的 android 版本中,它总是运行良好,但是对于 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

我已更新到兼容性 jar 的最新版本,希望这可能会有所帮助,但仍然会出现错误。

我不确定如何获得旧版本和新版本之间的兼容性。

如果我从清单中删除 BIND_ACCESSIBILITY_SERVICE,那么我的应用程序不会显示在 Jelly Bean 中以能够打开可访问性。有什么建议么?

4

1 回答 1

3

好的,马克墨菲向我提出了一些建议,这就是有效的。

子类化服务类,因此有 2 个版本。

然后在 res/values 目录中有一个 bools.xml 文件,在 res/values-v16 目录中也有一个

在 v16 中将 is_jelly_bean 布尔值设置为 true,并在 res/values 目录中设置 is_not_jelly_bean。

然后在清单中有这样的东西

<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>
于 2012-07-16T19:00:39.030 回答