Accessibilityservice类用于辅助服务开发,提供像文字转语音的功能(不支持中文)等,可以加强用户界面的交互,方便像身体,视力,年龄等问题造成用户不能很好的和用户界面交换的情况。该辅助服务工作在后台,由系统调用,用户的界面的一些状态(比如 Button,CheckBox被点击了等)的改变可以通过回调Accessibilityservice方法来获得。
首先介绍Accessibilityservice的几个方法:
void onServiceConnected():这个方法是Accessibilityservice生命周期的一部分,当系统成功成功绑定到Accessibilityservice服务时会被回掉,所以可以在里面进行一些必要的初始化,比如Accessibilityservice的一些参数配置的。
void onAccessibilityEvent(AccessibilityEvent event):被AccessibilityEvents回调,AccessibilityEvents当用户界面发生值得注意的事件(比如 Button,CheckBox被点击了等)又系统发送的一个Accessibility事件。比如在绑定了Accessibility服务的情况下点击用户界面的Button会回调此方法,通过event可以获取用户点击后发送来的信息。
void onInterrupt():这个在系统想要中断AccessibilityService返给的响应时会调用。在整个生命周期里会被调用多次。具体用下面的程序讲解,比如在打开系统的辅助功能界面后,点击触摸预览就会调用此方法。
void onUnbind() - 可选。在系统将要关闭这个AccessibilityService会被调用。在这个方法中进行一些释放资源的工作。
下面通过一个程序代码具体讲解:
程序入口类代码:
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final String mAction = Settings.ACTION_ACCESSIBILITY_SETTINGS;//系统辅助功能Action ImageView imageView = (ImageView) findViewById(R.id.imageView); Button stop = (Button) findViewById(R.id.stop); imageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(mAction); startActivity(intent); //点击开启系统辅助功能界面,在这里可以开启程序对应的辅助服务 } }); }
下面讲一下实现Accessibilityservice需要的配置,在SDK的帮助文档里面给出了在AndroidManifest.xml文件里怎么配置Accessibilityservice:
<service android:name=".MyAccessibilityService" android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"> <intent-filter> <action android:name="android.accessibilityservice.AccessibilityService" /> </intent-filter> . . . </service>