2017-04-17 30 views
1

我有一個Service啓動一個Button並通過調用WindowManager.addView()添加它。這個按鈕總是顯示在一切之上。如何在Android中單擊浮動按鈕時通過AccessibilityService執行滾動事件?

還有另一個Service,其延伸AccessibilityService。我確實收到onAccessibilityEvent的事件,但是在另一個Service中創建的Button上沒有發生點擊事件。我確實收到其他觀點的點擊事件。另一個問題是如何在用戶點擊另一個Service中創建的Button時觸發onAccessibilityEvent

我不知道爲什麼在Service中創建的Button不會觸發onAccessibilityEvent

這裏是我的FloatingButton

public class FloatingButton extends Service { 
    private WindowManager wm; 
    private WindowManager.LayoutParams mButtonParams; 

    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 

     wm = (WindowManager) getSystemService(WINDOW_SERVICE); 
     mButtonParams = new WindowManager.LayoutParams(
       WindowManager.LayoutParams.WRAP_CONTENT, 
       WindowManager.LayoutParams.WRAP_CONTENT, 
       WindowManager.LayoutParams.TYPE_PHONE, 
       WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, 
       PixelFormat.TRANSLUCENT); 
     mButtonParams.gravity = Gravity.TOP | Gravity.START; 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     startFloatingButton(); 
     return START_STICKY; 
    } 

    private void startFloatingButton() { 
     Button btn = new Button(this); 
     btn.setText("scroll"); 
     wm.addView(btn, mButtonParams); 

     btn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // should fire onAccessibilityEvent() 
      } 
     }); 
    } 
} 

和我AccessibilityService

public class MyAccessibilityService extends AccessibilityService { 
    @Override 
    public void onAccessibilityEvent(AccessibilityEvent event) { 
     Log.v(TAG, "event type: " + event.getEventType()); 
    } 

    @Override 
    public void onInterrupt() { 

    } 
} 

我需要FloatingButton Service創建Button無論是在onAccessibilityEvent觸發一個事件或方法來執行AccessibilityNodeInfo.ACTION_SCROLL_FORWARD。但沒有AccessibilityEvent,我不知道如何執行滾動操作。還有,有沒有辦法在執行操作之前檢查當前視圖是否可滾動?

謝謝!

回答

0

變化

mButtonParams = new WindowManager.LayoutParams(
      WindowManager.LayoutParams.WRAP_CONTENT, 
      WindowManager.LayoutParams.WRAP_CONTENT, 
      WindowManager.LayoutParams.TYPE_PHONE, 
      WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, 
      PixelFormat.TRANSLUCENT); 

mButtonParams = new WindowManager.LayoutParams(
      WindowManager.LayoutParams.WRAP_CONTENT, 
      WindowManager.LayoutParams.WRAP_CONTENT, 
      WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, 
      WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, 
      PixelFormat.TRANSLUCENT); 

,並把它放在你的無障礙服務的onServiceConnected()方法。在您的輔助功能服務中創建窗口管理器,然後才能獲得輔助功能。向上滾動和向下滾動,

nodeInfo.performAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD); 
nodeInfo.performAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD); 

TYPE_PHONE不允許後臺點擊。

相關問題