美文网首页
系统进程和非系统进程获取窗口的区别,及安卓开发常用创建窗口的方法

系统进程和非系统进程获取窗口的区别,及安卓开发常用创建窗口的方法

作者: wenSome | 来源:发表于2024-07-19 14:22 被阅读0次

在 Android 系统中,系统进程和非系统进程在获取窗口(Window)方面有一些重要的区别。下面是它们的主要区别及实现方式:

系统进程与非系统进程获取窗口的区别

1、权限控制:

系统进程:系统进程拥有较高的权限,可以直接创建和管理系统级别的窗口。例如,系统的状态栏、通知栏等都是由系统进程控制的。
非系统进程:普通应用进程没有系统级别的权限,通常只能创建应用级别的窗口。为了在系统中创建覆盖其他应用的窗口,非系统进程必须获取 SYSTEM_ALERT_WINDOW 权限,这个权限需要用户在设置中显式授权。

2、窗口类型:

系统进程:可以创建系统类型的窗口,如 TYPE_SYSTEM_ALERT 或 TYPE_SYSTEM_OVERLAY,这些窗口能覆盖其他应用,甚至覆盖在锁屏界面上。
非系统进程:通常只能创建应用级别的窗口,如 TYPE_APPLICATION_OVERLAY(从 Android 8.0 开始)或者 TYPE_PHONE(较旧的类型,适用于通话界面)。这些窗口可以覆盖在其他应用窗口之上,但需要特殊权限,并且有一定的限制。

3、实现方式:

系统进程:通常在系统层面通过 WindowManagerService 直接创建和管理窗口,不需要用户的权限授权。
非系统进程:通过 WindowManager 服务创建窗口,需要用户授权相应的权限(如 SYSTEM_ALERT_WINDOW),并且在实现时需要考虑应用的安全性和用户体验。

安卓开发者常用的创建窗口的方法

1、使用 WindowManager:

创建窗口:通过 WindowManager 可以创建窗口,窗口的类型(如 TYPE_APPLICATION_OVERLAY)决定了窗口的行为和权限要求。
示例代码:

WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
    WindowManager.LayoutParams.MATCH_PARENT,
    WindowManager.LayoutParams.MATCH_PARENT,
    WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
    WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
    PixelFormat.TRANSLUCENT
);
View view = LayoutInflater.from(this).inflate(R.layout.overlay_layout, null);
windowManager.addView(view, params);

2、通过 Service 创建窗口:

步骤:
在 Service 中使用 WindowManager 创建窗口。
需要在 AndroidManifest.xml 中声明 SYSTEM_ALERT_WINDOW 权限。
在应用设置中请求用户授权 SYSTEM_ALERT_WINDOW 权限。

示例代码:

public class OverlayService extends Service {
    private WindowManager windowManager;
    private View overlayView;

    @Override
    public void onCreate() {
        super.onCreate();
        windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
        overlayView = LayoutInflater.from(this).inflate(R.layout.overlay_layout, null);

        WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.MATCH_PARENT,
            WindowManager.LayoutParams.MATCH_PARENT,
            WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
            PixelFormat.TRANSLUCENT
        );

        windowManager.addView(overlayView, params);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        if (overlayView != null) {
            windowManager.removeView(overlayView);
        }
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}

总结
系统进程可以创建系统级别的窗口,并且无需额外权限,但控制范围较大。
非系统进程创建窗口需要额外的权限,并且通常只能创建应用级别的窗口。
创建窗口的方法包括使用 WindowManager 和在 Service 中进行窗口管理。

相关文章

  • framework学习笔记13. 进程的创建和 applicat

    1. 安卓系统启动:安卓系统在第一个用户进程Init进程启动时,会解析init.rc脚本,启动zygote进程(执...

  • 线程

    线程和进程 进程 线程 线程和进程的区别 线程的好处和坏处 创建线程的方式一 线程中常用的方法 代码实例 创建线程...

  • Window Manager Service

    IPC架构 应用开发者通过 WindowManager.addView向系统申请一个窗口,App进程内的Frame...

  • 越过用户授权使用浮窗

    上一片篇文章分析了Android窗口系统层次、Ativity的窗口和系统窗口的区别,这篇文章我来说说使用系统窗口来...

  • 端口占用查询及终止进程

    端口占用查询及终止进程 Windows系统 开始按钮+R 打开运行image.png 输入cmd,打开cmd窗口i...

  • (Windows)关闭进程及进程cmd窗口bat脚本

    首先开启一个java进程的窗口 根据运行程序jar包名称获取PID关闭进程 根据端口号关闭进程并根据窗口名称关闭窗...

  • 从事Android以来的相关总结2-Android技能

    Android下的进程与线程: 1、进程的生命周期: 1)、进程的创建及回收: 进程是被系统创建的,当内存不足的时...

  • 图解 | 一图摸清Android系统服务

    一图摸清Android系统服务的获取和注册流程~ 大纲: 获取系统服务 注册系统服务独立进程的服务非独立进程的服务...

  • 简单明了 | 一图摸清Android系统服务

    一图摸清Android系统服务的获取和注册流程~ 大纲: 获取系统服务 注册系统服务独立进程的服务非独立进程的服务...

  • 进程产生

    用系统调用创建进程 先创建一个文件process.c,封装通用的创建进程逻辑。 fork创建子进程,父进程和子进程...

网友评论

      本文标题:系统进程和非系统进程获取窗口的区别,及安卓开发常用创建窗口的方法

      本文链接:https://www.haomeiwen.com/subject/ppbdhjtx.html