Draw Overlay in Android (system wide)

前端 未结 2 1999
抹茶落季
抹茶落季 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:

    <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));
    
    0 讨论(0)
  • 2021-01-01 03:25

    You can use my library just removing this method addWatermarkWithinApplicationLifecycle() which sticks the overlay with the app lifecycle (As you want to show the overlay all over the phone app). Please also don't forget to add these permissions -

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

    The gif preview of my library -

    0 讨论(0)
提交回复
热议问题