2013-10-09 20 views
8

Tôi đã viết một AccessibilityService rất đơn giản và tôi đang cố gắng để có mô tả của dịch vụ hiển thị trong Cài đặt/trợ năng/ứng dụng của tôi. Dưới đây là tất cả mã của tôi nên đặt mô tả thành "Xin chào!" nhưng các thiết lập vẫn cho thấy "không có mô tả"Accessibility Mô tả dịch vụ

enter image description here

dịch vụ của tôi:

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


    }; 
} 

trong manifest của tôi có điều này cho các dịch vụ:

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

và trong my res/xml i có một ccessibility_service_config.xml file:

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

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

và cuối cùng trong res của tôi/values ​​/ i có strings.xml mà trông như thế này:

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

Tôi biết đã muộn nhưng tôi tin rằng tôi đang đối mặt với cùng một vấn đề chính xác - Bạn đã xoay sở để giải quyết vấn đề này như thế nào? –

Trả lời

4

Tôi chạy vào vấn đề này cùng và cuối cùng đã nhận nó làm việc. Tôi biết bản thân dịch vụ này bao gồm sự cho phép nhưng bạn cũng cần thêm sự cho phép BIND_ACCESSIBILITY_SERVICE vào tệp kê khai.

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

Các <meta-data> cho dịch vụ phải được đặt tên android.accessibilityservice mà bạn có vì vậy đó là tốt.

Cuối cùng, tôi phải đẩy gói ứng dụng vào thiết bị của mình rồi khởi động lại nó để thực hiện các thay đổi.

LƯU Ý: thêm description thuộc tính trong các yếu tố <service> trong manifest không ảnh hưởng đến các mô tả dịch vụ thể hiện trong các thiết lập hệ thống.

Các vấn đề liên quan