在Android中画出覆盖(系统级) [英] Draw Overlay in Android (system wide)

查看:185
本文介绍了在Android中画出覆盖(系统级)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有没有一种方法来在任何Android应用?

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

我使用的是Android的x86端口,并具有系统权限。

I am using Android x86 port and have system rights.

@Edit:覆盖层下面的观点应该得到的所有事件

@ The view below the overlay should receive all events.

推荐答案

这是可能做到这一点通过创建一个服务,增加的观点在目前的窗口管理器

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>

和启动:

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

这篇关于在Android中画出覆盖(系统级)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆