2012-02-16 25 views
13

Tôi đang cố gắng để bắt đầu thực hiện của tôi bằng cách sử dụng AccessibilityServiceCách bắt đầu AccessibilityService?

Intent mailAccessabilityIntent = new Intent(this, EmailAccessabilityService.class); 
startService(mailAccessabilityIntent); 

Vấn đề của tôi là onServiceConnected() chưa bao giờ được gọi. Làm thế nào để tôi bắt đầu dịch vụ này đúng cách?

Trả lời

1

Tôi vừa làm điều này ngay hôm nay. Khi dịch vụ của bạn được tạo và được liệt kê chính xác trong tệp kê khai với bộ lọc mục đích trợ năng. Sau đó, dịch vụ của bạn sẽ xuất hiện trong các dịch vụ hỗ trợ cài đặt. Bạn bắt đầu bằng cách nhấp vào nó rồi bật nó lên. Tôi không biết làm thế nào để bắt đầu nó thông qua ý định được nêu ra nếu nó thậm chí có thể. Tôi nghĩ rằng Lee GPS của nó, bạn chỉ có thể điều hướng người dùng để bắt đầu nút.

24

Vì dịch vụ trợ năng có thể khám phá và tương tác với nội dung trên màn hình, người dùng phải bật dịch vụ trong Cài đặt> Trợ năng một cách rõ ràng. Khi dịch vụ được bật, hệ thống sẽ tự động khởi động và liên kết nó với API trợ năng.

Hãy chắc chắn rằng bạn khai báo dịch vụ của bạn trong manifest ứng dụng của bạn:

<service android:name=".MyAccessibilityService" 
     android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"> 
    <intent-filter> 
     <action android:name="android.accessibilityservice.AccessibilityService" /> 
    </intent-filter> 
    . . . 
</service> 

Bạn cũng sẽ cần cung cấp cấu hình cho dịch vụ của bạn, hoặc bằng cách ghi đè setServiceInfo (AccessibilityServiceInfo) hoặc thêm một thuộc tính siêu dữ liệu và XML tập tin cấu hình.

Thuộc tính siêu dữ liệu đi trong < dịch vụ > khai của bạn sau khi < ý định lọc > thẻ và trông như thế này:

<meta-data android:name="android.accessibilityservice" 
      android:resource="@xml/accessibilityservice" /> 

Các cấu hình XML mà bạn đang tham khảo (trong trường hợp này, accessibilityservice .xml) trông như thế này:

<accessibility-service 
    android:accessibilityEventTypes="typeViewClicked|typeViewFocused" 
    android:packageNames="foo.bar, foo.baz" 
    android:accessibilityFeedbackType="feedbackSpoken" 
    android:notificationTimeout="100" 
    android:accessibilityFlags="flagDefault" 
    android:settingsActivity="foo.bar.TestBackActivity" 
    android:canRetrieveWindowContent="true" 
    . . . 
/> 

có thêm thông tin về những thẻ nào bạn có thể sử dụng tại http://developer.android.com/reference/android/R.styleable.html#AccessibilityService

+1

bạn thực sự xứng đáng có rất nhiều upvotes. Bởi vì ngay cả tài liệu là sai tại http://developer.android.com/guide/topics/ui/accessibility/services.html. Bạn đã hiển thị đúng cách để tạo dịch vụ trợ năng – gaurav414u

+1

@alanv "Khi dịch vụ được bật, hệ thống sẽ tự động khởi động và liên kết nó với API trợ năng". Tôi có câu hỏi, Dịch vụ trợ năng của tôi sau khi đã bật công việc. Bit khi nó treo nó kết quả cho phép trong thiết lập tue nhưng nó không dẫn đến dịch vụ thực hiện. Tại sao Hệ thống không khởi động lại dịch vụ của tôi sau một sự cố nhưng vẫn cho phép kết quả? – Hoper

+2

@ v1sc3rr4k Khi dịch vụ được liên kết với hệ thống (chẳng hạn như Dịch vụ trợ năng) bị treo, hệ thống sẽ không khởi động lại cho đến khi được cấp lại hoặc hệ điều hành được khởi động lại. Cố gắng thu hồi quyền và bật lại, dịch vụ sẽ bắt đầu lại. Hy vọng nó giúp. – abhinav