2013-10-09 120 views
8

我写了一个非常简单的accessibilityService,我试图让的服务说明显示在设置/辅助功能/我的应用。下面是我所有的代码,它应该将描述设置为“Hello!”但设置仍显示 “没有可用的描述”辅助功能服务说明

enter image description here

我的服务:

public class IdleService extends AccessibilityService{ 

    int interval = 100; 
    int maxIdleTime = 20000; 
    int idleTime = 0; 
    Handler mHandler; 
    String cProcess; 

    @Override 
    public void onServiceConnected(){ 

     mHandler = new Handler(); 

     AccessibilityServiceInfo info = new AccessibilityServiceInfo(); 
     // we are interested in all types of accessibility events 
     info.describeContents(); 
     info.eventTypes = AccessibilityEvent.TYPES_ALL_MASK; 
     info.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC; 
     // we want to receive events in a certain interval 
     info.notificationTimeout = interval; 

     setServiceInfo(info); 

     Log.e("IdleService", " idle service connected!"); 
     statusChecker.run(); 
    } 

    @Override 
    public void onAccessibilityEvent(AccessibilityEvent arg0) 
    { 
     // TODO Auto-generated method stub 
     Log.v("IdleService", "reseting idle time"); 
     idleTime = 0; 
    } 

    @Override 
    public void onInterrupt() 
    { 
     // TODO Auto-generated method stub 
     Log.v("IdleService", "INTERUPTED"); 
    } 

    public void setMaxIdleTimeInSeconds(int time) 
    { 

     maxIdleTime = time *1000; 
    } 


    Runnable statusChecker = new Runnable() 
    { 

     @Override 
     public void run() { 
      // TODO Auto-generated method stub 
      ActivityManager am = (ActivityManager) getApplicationContext() 
        .getSystemService(Context.ACTIVITY_SERVICE); 

      List<ActivityManager.RunningTaskInfo> processList = am 
        .getRunningTasks(5); 

      cProcess = processList.get(0).baseActivity.getPackageName(); 

      Log.v("IdleService", "Current PackageName:"+cProcess); 
      cProcess = processList.get(0).baseActivity.getClassName(); 

      Log.v("IdleService", "Current ClassName:"+cProcess); 
      idleTime +=100; 
      Log.v("IdleService", "TICK TOCK, user Idle for:"+idleTime); 
      if(idleTime>=maxIdleTime) 
      { 
       Log.v("IdleService", "we timed out do to inactivity"); 
       //mHandler.postDelayed(statusChecker, interval); 
       //stopSelf(); 
      }else{ 


      } 
      mHandler.postDelayed(statusChecker, interval); 
     } 


    }; 
} 

在我的清单我有这样的服务:

<service android:name="com.myPackage.IdleService" 
       android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"> 
        <meta-data 
        android:name="android.accessibilityservice" 
        android:resource="@xml/accessibility_service_config" /> 
        <intent-filter> 
         <action android:name="android.accessibilityservice.AccessibilityService" /> 
        </intent-filter> 

       </service> 

和我的res/xml我有一个ccessibility_service_config.xml文件:

<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android" 
    android:description="@string/accessibility_service_description" 

    android:settingsActivity="com.example.android.accessibility.ServiceSettingsActivity" 
/> 

在我RES /值终于/我有strings.xml中,看起来像这样:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string name="accessibility_service_description">Hello!</string> 
</resources> 
+0

我知道这是一个但很晚,但我相信我面临着完全相同的问题 - 你是如何设法解决这个问题的? –

回答

4

我遇到了同样的问题,并最终得到了它上班。我知道服务本身包含权限,但您还需要将清单中的BIND_ACCESSIBILITY_SERVICE权限添加到清单中。

<manifest ...> 
    ... 
    <uses-permission android:name="android.permission.BIND_ACCESSIBILITY_SERVICE" /> 
    ... 
</manifest> 

<meta-data>的服务必须命名为android.accessibilityservice,你有那么这很好。

最后,我不得不将apk安装到我的设备上,然后重新启动以进行更改。

注:在清单添加在<service>元件的description属性不影响在系统设置中所示的服务描述。