アプリのクリック、選択、スワイプ、閉じるなどのすべてのユーザー操作をデータベースに保存するモバイルアプリを開発したいと考えています。操作のボタン名、ID、時間を保存する必要があります。
実行中の他のアプリを邪魔することなく、Android でそれを追跡するにはどうすればよいですか?
アプリのクリック、選択、スワイプ、閉じるなどのすべてのユーザー操作をデータベースに保存するモバイルアプリを開発したいと考えています。操作のボタン名、ID、時間を保存する必要があります。
実行中の他のアプリを邪魔することなく、Android でそれを追跡するにはどうすればよいですか?
これを行うネイティブな方法はありません。これを行う (簡単な) API を公開すると、あまりにも多くの人が (仮想) キーボードで入力したパスワードを含むユーザーのアクションを簡単に追跡できるようになるためです。安全保障問題。開発するアプリがこの追跡を主な目的として (バックグラウンドの「追加の」非広告追跡としてではなく) 行うと仮定すると、これはあまり問題になりません。
オーバーレイを使用すると、他のアクティビティに干渉することなく、一部のイベントをキャプチャできます。Service
キャプチャ ウィンドウを作成する で、次のように指定しTYPE_SYSTEM_OVERLAY
ますFLAG_WATCH_OUTSIDE_TOUCH
。
mView = new TouchCaptureView(this);
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
PixelFormat.TRANSLUCENT);
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
wm.addView(mView, params);
次に、タッチ キャプチャ ビューをオーバーライドして、データベース内のonTouchEvent
すべてを記録MotionEvent
します。ただし、これでは、ユーザーが実際にクリックしたものを知ることはできません。それはボタン、チェックボックスなどである可能性があり、それを知る方法はありません(さらに、コントロールがカスタム実装である可能性があります)。アプリはユーザーのアクションを他のアプリにブロードキャストしないため、結果のアクションを決定することはまったく不可能です。また、Android 4.0 以降では、オーバーレイ ウィンドウはイベントをキャプチャしなくなりました。TYPE_SYSTEM_ALERT
引き続きイベントをキャプチャしますが、他のアクティビティに干渉します。
TL;DR: できません。