Draw Overlay in Android (system wide)

妖精的绣舞 提交于 2019-11-29 15:50:13

问题


Is there a way to draw an overlay window always on top of any android application?

I am using Android x86 port and have system rights.

@Edit: The view below the overlay should receive all events.


回答1:


It's possible to do that by creating a Service that adds the view in the current WindowManager:

public class OverlayService extends Service {

    @Override
    public void onCreate() {
        super.onCreate();

        WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);

        View overlay = /* create your overlay here */;

        WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
            PixelFormat.TRANSLUCENT);
        windowManager.addView(overlay , params);
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }   
}

But you need this extra permission:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

And then just register the service in the manifest:

<service android:name=".OverlayService" ></service>

and start it:

startService(new Intent(this, OverlayService.class));


来源:https://stackoverflow.com/questions/13346111/draw-overlay-in-android-system-wide

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!