Draw Overlay in Android (system wide)

前端 未结 2 2013
抹茶落季
抹茶落季 2021-01-01 02:56

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

2条回答
  •  暖寄归人
    2021-01-01 03:25

    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:

    
    

    And then just register the service in the manifest:

    
    

    and start it:

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

提交回复
热议问题