[問題] 模擬點擊懸浮View並傳遞事件給螢幕

作者: RX1226 (NO KING)   2019-01-02 18:38:54
板上的大大們您好
小弟想做一個懸浮視窗
最小化回到桌面
可以移動到特定位置
然後按下按鈕後會在該位置模擬點擊動作
會點擊到螢幕上的對應位置
現況與問題描述:
目前懸浮視窗和模擬點擊都做了可以Work
在自己的APP下按下模擬點擊可以點到特定位置
但是在最小化APP後模擬點擊的部分卻無法觸發該位置的點擊
在輸出Log後發現點擊事件有觸發
但是沒辦法傳遞到螢幕上的元件
程式碼如下:
Button btn_click = dialog_control.findViewById(R.id.btn_click);
btn_click.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//取得目標位置在螢幕上的座標
int[] location = new int[2];
dialog_target.getLocationOnScreen(location);
//有取得正確座標, 執行模擬點擊時無法觸發畫面上的元件
simulateTouchEvent(dialog_target, location[0], location[1]);
}
});
其中dialog_control是控制的View, dialog_target是懸浮的目標視窗
想要模擬點擊dialog_target位置下的元件
不知道是否是點擊方式選錯了, 或是需要特別的權限
先謝謝大大的指引了
發現少貼了simulateTouchEvent
立馬補上
private void simulateTouchEvent(View view, float x, float y) {
long downTime = SystemClock.uptimeMillis();
long eventTime = SystemClock.uptimeMillis() + 100;
int metaState = 0;
MotionEvent motionEvent = MotionEvent.obtain(downTime, eventTime,
MotionEvent.ACTION_DOWN, x, y, metaState);
view.dispatchTouchEvent(motionEvent);
MotionEvent upEvent = MotionEvent.obtain(downTime+1000, eventTime+1000,
MotionEvent.ACTION_UP, x,y, metaState);
view.dispatchTouchEvent(upEvent);
}
作者: lonelytea (霸氣逼人)   2019-01-02 21:34:00
不用權限 setOnClickListener沒錯 你去看simulateTouch是否執行正確
作者: RX1226 (NO KING)   2019-01-03 10:26:00
我來研究看看, 謝謝lonelytea大大的方向指引!
作者: lonelytea (霸氣逼人)   2019-01-03 05:34:00
不用權限 setOnClickListener沒錯 你去看simulateTouch是否執行正確
作者: RX1226 (NO KING)   2019-01-03 18:26:00
我來研究看看, 謝謝lonelytea大大的方向指引!發現現在卡在點擊事件無法傳遞到螢幕上的特定位置
作者: beyondthe (bb)   2019-01-04 03:09:00
不是在自己的 app 應該沒權限吧
作者: RX1226 (NO KING)   2019-01-04 18:39:00
我在研究看看, 謝謝大大們的建議
作者: beyondthe (bb)   2019-01-03 19:09:00
不是在自己的 app 應該沒權限吧
作者: RX1226 (NO KING)   2019-01-04 10:39:00
我在研究看看, 謝謝大大們的建議

Links booklink

Contact Us: admin [ a t ] ucptt.com