私のアプリの外でも、ユーザーが行うすべてのタッチイベントをリッスンするための合法的な方法がAndroidにありますか?私はバックグラウンドで画面のジェスチャーを聞くサービスのようなものを持っていることを意味します。バックグラウンドでのタッチイベントを聞きます。
答えて
アイデアは、本当に小さい(たとえば1x1ピクセル)ダミーのUIフラグメントを定義し、それを画面のコーナーの1つに配置し、その外側のすべてのタッチイベントをリッスンさせます。まあ、文字通り、それは "目に見えない"ではなく、実際には常に前景です!しかし、それはとても小さいので、うまくいけばユーザーは違いを感じることはありません。
mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
mDummyView = new LinearLayout(mContext);
LayoutParams params = new LayoutParams(1, LayoutParams.MATCH_PARENT);
mDummyView.setLayoutParams(params);
mDummyView.setOnTouchListener(this);
は、ここでは1つの画素とダミービューの幅を設定し、高さは親の高さに:
まずは、このダミーのビューを作成してみましょう。また、このダミービューのタッチイベントリッスンを設定します。これについては後で実装します。
次に、このダミービューを追加してみましょう。ここ
LayoutParams params = new LayoutParams(
1, /* width */
1, /* height */
LayoutParams.TYPE_PHONE,
LayoutParams.FLAG_NOT_FOCUSABLE |
LayoutParams.FLAG_NOT_TOUCH_MODAL |
LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
PixelFormat.TRANSPARENT
);
params.gravity = Gravity.LEFT | Gravity.TOP;
mWindowManager.addView(mDummyView, params);
キーがFLAG_WATCH_OUTSIDE_TOUCHフラグである、それはイベントがダミービュー内であるか否かを、画面上のすべてのイベントをキャプチャするためにダミーの表示を可能にします。
最後に、View.OnTouchListenerリスナーを実装してtouchイベントを処理しましょう。
@Override
public boolean onTouch(View v, MotionEvent event) {
Log.d(TAG, "Touch event: " + event.toString());
// log it
return false;
}
私たちはイベントを実際に処理していないので、実際のUI要素がそれらのイベントを取得できるように、falseを返す必要があります。
最後に、ダミービューが常にタッチイベントをリスニングするようにするには、これらをすべてサービスでラップする必要があります。つまり、onCreateでダミービューを作成し、onStartCommandの画面に追加します。また、サービスはView.OnTouchListenerを実装してタッチイベントを受け取る必要があります。
Referrence は、私はあなたがこの記事からあなたの答えを取得する必要があります http://jhshi.me/2014/11/09/monitor-screen-touch-event-in-android/
良い答えですが、イベントがそのダミービューの外にキャプチャされていれば間違った座標が表示されてしまい、正確にタッチが発生した場所を知る必要があります。 – Salivan
このアプローチは動作しません。なぜなら、現在のコンテキストの外にあるイベントは常に0を返すからです。これはAndroid 4.3以降の変更です(ソース:https://github.com/android/platform_frameworks_base/blob/79e0206ef3203a1842949242e58fa8f3c25eb129/services/入力/ InputDispatcher.cpp#L1417) – iamseiko
- 1. c#keypressコンソールアプリケーションのバックグラウンドで聞きます
- 2. バックグラウンドでアンドロイドデバイスの指紋を継続的に聞きます。
- 3. UWP:アプリがバックグラウンドのときにキーボードイベントを聞きます
- 4. バックグラウンドでの変更を聞く方法(Parse Server)
- 5. Express.js - シャットダウンを聞きます。
- 6. バックグラウンドで着信SMSメッセージを途切れずに聞く - サービス?
- 7. ExpressでSOAPリクエストを聞きます
- 8. aiohttpアプリケーションプロセスでZeroMQを聞きます
- 9. FreshMvvmのItemTappedイベントを聞きます
- 10. SwiftのInfowWindowタップを聞きます
- 11. Androidのレイアウト変更を聞きます
- 12. GPSステータスの変更を聞きます
- 13. ローカルイベントの通知を聞きます
- 14. CallLog.Callsの変更を聞きます
- 15. オリエンテーションの変更を聞きます
- 16. reactjsのブートストラップモーダルクローズイベントを聞きます
- 17. (どのように)Windowsでタッチイベントをエミュレートできますか?
- 18. 完了するアニメーションを聞きます
- 19. Java(Swing)がキーイベントを聞きます
- 20. fifoとソケットファイルを聞きます
- 21. コーダーは変更を聞きますか?
- 22. アクティビティ放送受信を聞きます
- 23. キーボードプレス通知を聞きます
- 24. Firefox addon-sdk - ページナビゲーションを聞きます
- 25. RabbitmqはUDP接続を聞きます
- 26. a-frame(モバイルブラウザ)でタッチイベントを取得できますか?
- 27. Xamarinでタッチイベントを処理できるコンテナがありますか
- 28. MongoDBドライバでイベントを再接続するのを聞きます
- 29. AndroidのネイティブアプリでPOSTを聞くことはできますか?
- 30. UITextFieldのタッチイベントにどのように応答できますか?
ここからこれを得ましたhttp://stackoverflow.com/questions/6714020/how-can-a-service-listen-for-touch- gestures-events –
@ GodslaveAsadよく投稿しましたが、画面上でのユーザーの操作を妨げるソリューションしか提供していません。完全に見えないままにしておきたいものです。 – Salivan