2013-10-09 6 views
8

Ich schrieb eine sehr einfache accessibilityService und ich versuche, die Beschreibung des Dienstes in Einstellungen/Accessibility/meine App zu haben. Unten ist mein Code, der die Beschreibung auf "Hallo!" Setzen sollte. aber die Einstellungen zeigt noch "keine Beschreibung"Accessibility Service Beschreibung

enter image description here

meinen Dienst:

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); 
     } 


    }; 
} 

in meinem Manifest Ich habe dies für den Service:

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

und in meiner res/xml habe ich eine a ccessibility_service_config.xml Datei:

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

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

und schließlich in meine res/Werte/i haben strings.xml, die wie folgt aussieht:

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

Ich weiß, es ist eine aber zu spät, aber ich glaube, ich bin mit genau dem gleichen Problem konfrontiert - Wie hast du es geschafft, dieses Problem zu lösen? –

Antwort

4

ich in das gleiche Problem lief und bekam es schließlich arbeiten. Ich weiß, dass der Dienst selbst die Berechtigung enthält, aber Sie müssen dem Manifest auch die BIND_ACCESSIBILITY_SERVICE-Berechtigung hinzufügen.

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

Die <meta-data> für den Dienst muss android.accessibilityservice, die Sie so gut, das ist haben genannt werden.

Schließlich musste ich die apk auf mein Gerät schieben und dann neu starten für die Änderungen zu nehmen.

HINWEIS: Hinzufügen des description Attribut im <service> Element im Manifest nicht beeinflussen die Beschreibung Service in den Systemeinstellungen angezeigt.