Как создать пользовательский интерфейс и виджет, который находится поверх всех приложений в Android?

могу ли я создать пользовательский интерфейс или виджет в Android, который будет сидеть поверх всех приложений? Есть приложения, виджеты подобного. Один пример имеет значок камеры поверх всех приложений, которые при нажатии будут захватывать экран.

2 ответов


Если вы хотите просто отобразить что-то, вы можете отобразить его поверх всего, даже на экране блокировки.

Если вы хотите, чтобы что-то было кликабельным, вы можете отобразить его поверх всего, кроме экрана блокировки.

вот образец, изменить для ваших нужд:

создайте службу и выполните следующие действия:

//These three are our main components.
WindowManager wm;
LinearLayout ll;
WindowManager.LayoutParams ll_lp;

//Just a sample layout parameters.
ll_lp = new WindowManager.LayoutParams();
ll_lp.format = PixelFormat.TRANSLUCENT;
ll_lp.height = WindowManager.LayoutParams.FILL_PARENT;
ll_lp.width = WindowManager.LayoutParams.FILL_PARENT;
ll_lp.gravity = Gravity.CLIP_HORIZONTAL | Gravity.TOP;

//This one is necessary.
ll_lp.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;

//Play around with these two.
ll_lp.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;
ll_lp.flags = ll_lp.flags | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;

//This is our main layout.
ll = new LinearLayout(this);
ll.setBackgroundColor(android.graphics.Color.argb(0, 0, 0, 0));
ll.setHapticFeedbackEnabled(true);

//And finally we add what we created to the screen.
wm.addView(ll, ll_lp);

ниже приведены дополнительные параметры отображения представления.

Это позволит сделать его поверх всего (включая экран блокировки), но не кликабельны. WindowManager.LayoutParams. TYPE_SYSTEM_OVERLAY

Это сделает его кликабельным, но он не будет над экраном блокировки WindowManager.LayoutParams.TYPE_SYSTEM_ALERT

Это сделает его выше всего (включая экран блокировки) и кликабельным. WindowManager.LayoutParams.TYPE_SYSTEM_ERROR

одно замечание об использовании "TYPE_SYSTEM_ERROR". Если вы проводите в событии щелчка, все, что он вызывает, произойдет за экраном блокировки.