2012-06-18 42 views
11

Tôi muốn đăng nhập tất cả các sự kiện chúc rượu trong android ics (4.0.3), nhưng tôi không thể đăng nhập bất kỳ sự kiện hệ thống nào. Dịch vụ chỉ chưa được bắt đầu!dịch vụ trợ năng không được bắt đầu

Theo câu hỏi này: onAccessibilityEvent(AccessibilityEvent event) not intercepting notification

MyAccessibilityService.java

package com.test.toasts2; 

import android.accessibilityservice.AccessibilityService; 
import android.accessibilityservice.AccessibilityServiceInfo; 
import android.app.Notification; 
import android.os.Parcelable; 
import android.util.Log; 
import android.view.accessibility.AccessibilityEvent; 
import android.widget.Toast; 

public class MyAccessibilityService extends AccessibilityService { 


    public static final String TAG = "volumeMaster"; 

    @Override 
    public void onAccessibilityEvent(AccessibilityEvent event) 
    { 
     Log.v(TAG, "***** onAccessibilityEvent"); 
     Toast.makeText(getApplicationContext(), "Got event from: " + event.getPackageName(), Toast.LENGTH_LONG).show(); 
    } 

    @Override 
    public void onInterrupt() 
    { 
     Log.v(TAG, "***** onInterrupt"); 
    } 

    @Override 
    public void onServiceConnected() 
    { 
     Log.v(TAG, "***** onServiceConnected");  


     AccessibilityServiceInfo info = new AccessibilityServiceInfo(); 
     info.eventTypes = AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED; 
     info.notificationTimeout = 100; 
     info.feedbackType = AccessibilityEvent.TYPES_ALL_MASK; 
     setServiceInfo(info); 

    } 
} 

Toast2Activity.java

package com.test.toasts2; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.widget.Toast; 

public class Toast2Activity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     Intent i = new Intent(this, MyAccessibilityService.class); 
     startService(i); 
    } 
} 

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.test.toasts2" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk android:minSdkVersion="15" /> 

    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 
<service android:name=".MyAccessibilityService" android:label="@string/app_name" android:enabled="true" android:exported="false"> 
     <intent-filter> 
      <action android:name="android.accessibilityservice.AccessibilityService" /> 
     </intent-filter> 

</service> 

     <activity 
      android:name=".Toast2Activity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

Tôi bao gồm thẻ hoạt động trong tệp kê khai (để bắt đầu dịch vụ khi bắt đầu ứng dụng) và cũng đã cố gắng xóa. Không có gì thay đổi. Dịch vụ chưa được bắt đầu. Tôi không nhận được thông báo trong log mèo (Log.v in onServiceConected).

Tôi đang biên dịch ứng dụng này làm ứng dụng bình thường (không phải ứng dụng hệ thống), android 4.0.3. Tôi có làm điều gì sai?

dự án đính kèm (có thể sai lầm là ở một nơi khác, hoặc có lẽ tôi đang biên soạn nó sai): https://dl.dropbox.com/u/1928109/toast2.zip

Trả lời

32

Bạn cần phải kích hoạt dịch vụ khả năng tiếp cận từ menu cài đặt hệ thống:

  • Cài đặt ứng dụng của bạn trên thiết bị thử nghiệm.

  • Với ứng dụng được cài đặt trên thiết bị, thay đổi cài đặt sau đây trên thiết bị:

    Home Screen> System Settings> Accessibility> Dịch vụ truy cập> Toast2> Thay đổi từ Tắt thành Bật,

    nơi Toast2 là tên ứng dụng của bạn.

  • Sau đó chạy ứng dụng của bạn.

AFAIK không có phương pháp để đặt khả năng truy cập theo chương trình ở chế độ Bật từ bên trong ứng dụng của bạn. Để khắc phục sự cố, bạn có thể nhắc người dùng thay đổi cài đặt và nếu họ đồng ý bằng cách nhấp vào nút, hãy khởi chạy cài đặt hệ thống trợ năng như sau:

Intent intent = new Intent(android.provider.Settings.ACTION_ACCESSIBILITY_SETTINGS); 
startActivityForResult(intent, 0); 
+6

Tôi dường như không thể tìm thấy Dịch vụ trợ năng trong Android 4.2.1 – Klaasvaak

+0

Mã của bạn thực sự hữu ích. Cảm ơn vì điều đó. Có cách nào để bật dịch vụ trợ năng thông qua mã không? – Kameswari

+0

@Kameswari Không có cách nào để làm điều đó, theo như tôi biết. –

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