Я хочу создать системное оверлейное представление, которое обнаруживает жесты, не блокируя другие приложения. Как мне это сделать (такие приложения, как OmniSwipe, Easy Swipe обнаруживают жесты, ничего не блокируя)? Ниже приведен код, который блокирует другие приложения, вызывая системное наложение.
package com.carxsing.anglelockscreen.GestureDetector;
public class GestureService extends Service implements
GestureOverlayView.OnGesturePerformedListener{
private WindowManager windowManager;
private GestureOverlayView GestureOverlay, GestureOverlay2;
private GestureLibrary mGestureLib;
public GestureService() {
}
@Override public IBinder onBind(Intent intent) {
return null;
}
@Override public void onCreate() {
super.onCreate();
windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
GestureOverlay = new GestureOverlayView(this);
GestureOverlay2 = new GestureOverlayView(this);
GestureOverlay.setGestureColor(00000000);
GestureOverlay.setUncertainGestureColor(00000000);
GestureOverlay2.setGestureColor(00000000);
GestureOverlay2.setUncertainGestureColor(00000000);
GestureOverlay.addOnGesturePerformedListener(this);
GestureOverlay2.addOnGesturePerformedListener(this);
mGestureLib = GestureLibraries.fromRawResource(this, R.raw.gestures);
if (!mGestureLib.load()) {
mGestureLib.save();
}
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
PixelFormat.TRANSLUCENT);
params.height = 450;
params.width = 75;
params.gravity = Gravity.BOTTOM | Gravity.LEFT;
windowManager.addView(GestureOverlay, params);
params.height = 450;
params.width = 75;
params.gravity = Gravity.BOTTOM | Gravity.RIGHT;
windowManager.addView(GestureOverlay2, params);
}
@Override
public void onDestroy() {
super.onDestroy();
if (GestureOverlay != null) windowManager.removeView(GestureOverlay);
if (GestureOverlay2 != null) windowManager.removeView(GestureOverlay2);
}
public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {
ArrayList<Prediction> predictions = mGestureLib.recognize(gesture);
if (predictions.size() > 0) {
Prediction prediction = predictions.get(0);
if (prediction.score > 1.0) {
if (prediction.name.equals(Gestures.bottomleft) || prediction.name.equals(Gestures.bottomright)) {
Intent i = new Intent(GestureService.this, LockScreenActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.putExtra("start", 1);
startActivity(i);
}
}
}
}
}