2012-07-15 62 views
1

我有一个使用无障碍服务来监控事件的应用程序。它在Android的版本中一直很好,直到ICS,但果冻豆我没有太多的运气。Android无障碍服务向后兼容性和果冻豆

由于文件提到,我在清单文件中添加

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中显示,以便能够切换辅助功能。有什么建议么?

回答

3

好的,mark murphy向我建议了一些小小的功能,这就是工作原理。

子类的服务类,所以有它的2个版本。

然后让在res一个bools.xml文件/目录值,也一个在res /值-V16目录

在有一V16布尔is_jelly_bean设置为true,并在RES一个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> 
+0

我一直在寻找这个,谢谢:) – 2012-11-27 14:17:55

+0

我不能让它下的Android 2.3.6工作,果冻豆是工作的罚款。我认为该服务正在运行,因为我看到2服务(一个主要和一个辅助功能服务为我的进程运行,但我没有得到2.3.6下的任何onAccessibilityEvent(AccessibilityEvent事件)。任何建议吗?我想获取Notification事件。Jelly bean工作正常。thx求助。 – MOST2K2 2012-12-07 06:41:35