一尘不染

在Android中绘制叠加层(系统范围)

linux

有没有办法总是在任何android应用程序顶部绘制覆盖窗口?

我正在使用Android x86端口并具有系统权限。

@Edit:叠加层下方的视图应接收所有事件。


阅读 416

收藏
2020-06-07

共1个答案

一尘不染

可以通过创建一个Service在当前视图中添加视图的方法来做到这一点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;
    }   
}

但是您需要以下额外权限:

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

然后只需在清单中注册服务:

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

并启动它:

startService(new Intent(this, OverlayService.class));
2020-06-07