2

Service開始し、Buttonを呼び出して追加する がありWindowManager.addView()ます。このボタンは常にすべての上に表示されます。

Service拡張する別のものがありますAccessibilityService。でイベントを受け取りますが、別の で作成されonAccessibilityEventた ではクリック イベントが発生しません。私は他のビューでクリックイベントを受け取ります。別の問題は、ユーザーが別のもので作成されたものをクリックしたときにトリガーする方法ですか?ButtonServiceonAccessibilityEventButtonService

Buttoncreated inが起動しない理由がわかりServiceませんonAccessibilityEvent

ここに私のフローティングボタンがあります

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() {

    }
}

ButtonFloatingButton で作成されたServiceイベントを発生させるonAccessibilityEventか、実行する方法が必要AccessibilityNodeInfo.ACTION_SCROLL_FORWARDです。がないAccessibilityEventと、スクロールアクションを実行する方法がわかりません。また、アクションを実行する前に現在のビューがスクロール可能かどうかを確認する方法はありますか?

ありがとう!!!

4

1 に答える 1

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 はバックグラウンド クリックを許可しませんでした。

于 2017-10-23T09:02:19.250 に答える