2013-10-09 3 views
8

Я написал очень простой доступ к сервису, и я пытаюсь получить описание услуги, отображаемой в Настройки/доступность/мое приложение. Ниже приведен весь мой код, который должен установить описание в «Привет!». но настройки еще не показывает "нет описания"Доступность Сервисное описание

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" 
/> 

и, наконец, в моих Рез/значений/я есть 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> The для службы должны быть названы android.accessibilityservice, которые у вас есть, так что это хорошо.

Наконец, мне пришлось нажать apk на свое устройство, а затем перезапустить его для внесения изменений.

Примечание: добавление атрибута description в <service> элемент в проявленном не влияет на описание сервиса, показанный в системных настройках.