当前位置:   article > 正文

Android AccessibilityService源码分析

Android AccessibilityService源码分析
AccessibilityService首先你要继承AccessibilityService,你会被要求复写
onKeyEvent、onIntercept、onAccessibilityEvent等方法。我们看这些方法在AccessibilityService中是如何实现的。

  1. public class AccessBackKeyService extends AccessibilityService {
  2. private static final String TAG = "jason";
  3. @Override
  4. protected boolean onKeyEvent(KeyEvent event) {
  5. Log.i(TAG, "onKeyEvent");
  6. if(event.getAction() == KeyEvent.ACTION_DOWN){
  7. return super.onKeyEvent(event);
  8. }
  9. Log.i(TAG, "onKeyEvent ACTION_DOWN");
  10. int key = event.getKeyCode();
  11. switch(key){
  12. case KeyEvent.KEYCODE_VOLUME_DOWN:
  13. Log.i(TAG, "KEYCODE_VOLUME_DOWN");
  14. break;
  15. case KeyEvent.KEYCODE_VOLUME_UP:
  16. Log.i(TAG, "KEYCODE_VOLUME_UP");
  17. Toast.makeText(this, "KEYCODE_VOLUME_UP", Toast.LENGTH_SHORT).show();
  18. break;
  19. case KeyEvent.KEYCODE_BACK:
  20. Log.i(TAG, "KEYCODE_BACK");
  21. Toast.makeText(this, "KEYCODE_BACK, source:"+event.getSource(), Toast.LENGTH_SHORT).show();
  22. break;
  23. case KeyEvent.KEYCODE_ESCAPE:
  24. Log.i(TAG, "KEYCODE_ESCAPE");
  25. Toast.makeText(this, "KEYCODE_ESCAPE", Toast.LENGTH_SHORT).show();
  26. break;
  27. }
  28. return super.onKeyEvent(event);
  29. }
  30. @Override
  31. public void onInterrupt() {
  32. }
  33. @Override
  34. public void onCreate() {
  35. super.onCreate();
  36. }
  37. @Override
  38. public void onAccessibilityEvent(AccessibilityEvent event) {
  39. // TODO Auto-generated method stub
  40. }
  41. @Override
  42. protected boolean onGesture(int gestureId) {
  43. Log.i("jason", "onGesture:"+gestureId);
  44. return super.onGesture(gestureId);
  45. }
  46. }



我们看到AccessibilityService中有一个接口

  1. /**
  2. * @hide
  3. */
  4. public interface Callbacks {
  5. public void onAccessibilityEvent(AccessibilityEvent event);
  6. public void onInterrupt();
  7. public void onServiceConnected();
  8. public void init(int connectionId, IBinder windowToken);
  9. public boolean onGesture(int gestureId);
  10. public boolean onKeyEvent(KeyEvent event);
  11. public void onMagnificationChanged(@NonNull Region region,
  12. float scale, float centerX, float centerY);
  13. public void onSoftKeyboardShowModeChanged(int showMode);
  14. public void onPerformGestureResult(int sequence, boolean completedSuccessfully);
  15. }



AccessibilityService利用观察者模式的形式将自己封装进一个IAccessibilityServiceClientWrapper内部类中,在onBind方法中实现,猜测在辅助功能打开开关的时候,onBind这个方法将被调用,一会我们从源码分析,先分析一下 IAccessibilityServiceClientWrapper
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/258615
推荐阅读
相关标签
  

闽ICP备14008679号