【问题标题】:Draw Overlay in Android (system wide)在 Android 中绘制叠加层(系统范围)
【发布时间】:2012-11-12 15:05:25
【问题描述】:

有没有办法在任何 android 应用程序上始终绘制覆盖窗口?

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

@Edit:覆盖层下方的视图应该接收所有事件。

【问题讨论】:

  • AFAIK 在 SDK 中没有合法的方法可以做到这一点。然而,市场上的一些应用程序已经成功地完成了它。如果您确实找到了一种我不会指望它永远工作的方法,那么出于有效的安全原因,他们选择不包含公共 API。
  • 不适用于 Android 市场。我想修改Android本身。

标签: android linux overlay framebuffer


【解决方案1】:

可以通过创建一个Service 来做到这一点,该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));

【讨论】:

  • 此解决方案是否会将所有事件通过路径传递到覆盖层下方的视图?我忘了把这个添加到问题中。
  • 你只需要添加WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE标志
【解决方案2】:

您可以使用我的library,只需删除此方法addWatermarkWithinApplicationLifecycle(),它将覆盖层与应用生命周期相结合(因为您想在手机应用中显示覆盖层)。也请不要忘记添加这些权限 -

<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"/>

我的图书馆的 gif 预览 -

【讨论】:

    猜你喜欢
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    • 2019-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多