Ich verwende einen Hintergrunddienst, um MotionEvent.ACTION_DOWN in Android 5.0 zu erkennen. Ich habe den bellow-Code benutzt und er kann mein Touch-Event erkennen, aber ich kann andere Apps nicht anfassen. Wie kann ich es reparieren? Wenn Sie eine bessere Lösung haben, geben Sie mir bitte. Allen danken.So erkennen Sie MotionEvent.ACTION_DOWN im Dienst Android
public class TouchServiceListener extends Service implements OnTouchListener {
private WindowManager mWindowManager;
// linear layout will use to detect touch event
private LinearLayout touchLayout;
@Override
public void onCreate() {
super.onCreate();
touchLayout = new LinearLayout(this);
// set layout width 30 px and height is equal to full screen
LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
touchLayout.setLayoutParams(lp);
// set color if you want layout visible on screen
touchLayout.setBackgroundColor(Color.CYAN);
// set on touch listener
touchLayout.setOnTouchListener(this);
// fetch window manager object
mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
// set layout parameter of window manager
WindowManager.LayoutParams mParams = new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT, // width of layout 30 px
WindowManager.LayoutParams.MATCH_PARENT, // height is equal to full screen
WindowManager.LayoutParams.TYPE_PHONE, // Type Ohone, These are non-application windows providing user interaction with the phone (in particular incoming calls).
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, // this window won't ever get key input focus
PixelFormat.TRANSLUCENT);
mParams.gravity = Gravity.LEFT | Gravity.TOP;
Log.i(TAG, "add View");
mWindowManager.addView(touchLayout, mParams);
}
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if(motionEvent.getAction() == MotionEvent.ACTION_UP|motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
Log.d(TAG, "Touch me");
}
return true;
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
Manifest
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
Ich habe es vorher versucht. Aber ich kann keine Apps drücken, wenn ich den obigen Code verwende. Könnten Sie es versuchen? – Jame
Ich habe diesen Code nach diesem Beitrag hier versucht.Wenn Sie auf eine andere Anwendungssteuerung zugreifen möchten, dann ist es nicht möglich. –
Vielen Dank. Ich habe es getestet. Entschuldigung für die Verspätung. Dein Code ist bearbeitet. Es zeigte jedoch eine Schaltfläche auf meinem Bildschirm. Ich habe versucht, es unsichtbar zu machen, aber die Berührung wird nicht sichtbar, wenn ich es unsichtbar mache. – Jame