当前位置: 首页 > web >正文

安卓基础(代码解析)

Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !Settings.canDrawOverlays(this)

Build.VERSION.SDK_INT >= Build.VERSION_CODES.M

Build.VERSION.SDK_INT:获取当前Android系统的API版本号,每个Android版本都有一个对应的API版本号,比如Android 6.0对应API 23,Android 7.0对应API 24。

Build.VERSION_CODES.M:是Android 6.0(API 23)的标识,从Android 6.0开始,系统对悬浮窗功能进行了限制,并且要求应用必须明确请求悬浮窗权限。

意思是:判断当前手机的系统版本是否大于或等于Android 6.0。

!Settings.canDrawOverlays(this)

Settings.canDrawOverlays():用来判断当前应用是否拥有悬浮窗权限,参数this表示当前应用的上下文(context)。

意思是:判断当前应用是否没有悬浮窗权限(!表示取反,即判断是否不拥有悬浮窗权限)。

ScreenCaptureService captureService = ScreenCaptureService.getInstance();

return captureService.getCurrentFrame();  // 获取当前屏幕帧

ByteArrayOutputStream bos = new ByteArrayOutputStream();

bitmap.compress(Bitmap.CompressFormat.PNG, 100, bos);

输入流:用于从外部设备读取数据到程序中(类似 “从管道一端吸水”)。

输出流:用于将程序中的数据写入到外部设备(类似 “向管道另一端注水”)。

创建文件夹

String directoryPath = "C:/myfolder/subfolder";
File directory = new File(directoryPath);
boolean success = directory.mkdir();
流类型​​存储位置​​本质​
ByteArrayOutputStream内存(JVM 堆)将数据写入内部的字节数组缓冲区
FileOutputStream磁盘(文件系统)将数据直接写入磁盘上的文件

"Hello".getBytes()      用于将​​字符串​​转换为​​字节数组​​。 [72, 101, 108, 108, 111]

.toByteArray()    这是 ByteArrayOutputStream 类的方法,用于将​​流中缓存的数据​​一次性转为​​字节数组​​。

Bitmap.compress() 方法用于将位图(Bitmap)数据压缩为指定格式(如 JPEG、PNG)并写入输出流。

public boolean compress(Bitmap.CompressFormat format, // 压缩格式(JPEG、PNG、WEBP)int quality,                  // 压缩质量(0-100,仅对 JPEG 和 WEBP 有效)OutputStream stream           // 输出流(如文件流、字节流)
)

DisplayMetrics 是 Android 开发中用于获取屏幕显示信息的核心类,包含了屏幕尺寸、密度、分辨率等关键指标。

属性名含义
widthPixels屏幕宽度(像素)
heightPixels屏幕高度(像素)
density屏幕密度比例(如 1.0 代表 mdpi,1.5 代表 hdpi,2.0 代表 xhdpi)
densityDpi屏幕每英寸点数(DPI,如 160、240、320)
scaledDensity字体缩放比例(通常与 density 相同,除非用户手动调整了字体大小)
xdpi / ydpi屏幕实际的水平 / 垂直 DPI(物理测量值)

123

WindowManager 是 Android 系统中用于管理窗口的核心组件,负责窗口的布局、显示层级和屏幕信息获取。它是连接应用与系统窗口系统的桥梁,常用于获取屏幕尺寸、创建悬浮窗、调整窗口参数等操作。

windowManager.getDefaultDisplay().getMetrics(metrics);

getDefaultDisplay()   作用:获取默认显示器(即主屏幕)的 Display 对象。
getMetrics(metrics)   作用:将屏幕信息(如尺寸、密度)填充到传入的 DisplayMetrics 对象中。

先创建MediaProjection

然后创建VirtualDisplay

使用ImageReader,它提供了一个Surface,可以作为VirtualDisplay的输出目标。

设置 ImageReader 的监听器,获取最新的图片。 image = reader.acquireLatestImage();

处理图片,把图片转化成bitmap。

当你保存图片时,通常是先将Bitmap对象转换为字节数组,然后将字节数组写入文

  • 使用 Bitmap

    • 需要对图像进行编辑(如裁剪、调色)。
    • 需要在 UI 上显示图像。
    • 需要获取或修改像素值(如实现滤镜效果)。
  • 使用字节数组

    • 需要存储图像到文件(如保存 JPEG/PNG)。
    • 需要通过网络传输图像。
    • 需要处理二进制数据(如加密、压缩)。

123

修饰符组合访问权限静态性可变性推荐场景风险
private static final类内部类内部使用的常量(如配置参数)
private static类内部类内部使用的共享变量(如计数器)
public static全局可见极少使用(违反封装原则)破坏封装,导致代码难以维护
public static final全局可见公开的常量(如数学常数、版本号)

http://www.xdnf.cn/news/8002.html

相关文章:

  • YOLO11解决方案之VisonEye对象映射
  • 利用 Java 爬虫根据关键词获取某手商品列表
  • 人工智能应用时代:个人成长与职业突围的底层逻辑
  • 黑马+点评常见问题
  • 配电网运行状态综合评估方法研究
  • API测试框架全解析
  • 咽拭子+病毒采样管助力多项呼吸道病原体核酸检测!
  • 2025第一届轩辕杯--Crypto--WriteUp
  • 【Netty】- 入门1
  • 可理解性输入:逛超市
  • git合并多次commit提交
  • RK3588+CODESYS+望获实时Linux - 软PLC运动控制解决方案
  • 回归分析(线性/非线性)
  • docker常用指令
  • 自制操作系统day6(GDTR、段描述符、PIC、实模式和保护模式、16位到32位切换、中断处理程序、idt的设定、EFLAG寄存器)(ai辅助整理)
  • JVM梳理(逻辑清晰)
  • 为何天线的长度设计为频率波长的四分之一?
  • TurboID技术:邻近标记技术的高效工具
  • Mujoco 学习系列(三)机器人状态IO与仿真操作
  • android RecyclerView列表DiffCallback说明
  • UI自动化测试框架:PO模式+数据驱动
  • 【面试题】Session 和 Cookie 的区别
  • 在Windows上安装Pygame 2.1.3:解决常见问题
  • CountDownLatch设计原理剖析:同步屏障的底层逻辑
  • 网络 :网络基础【网络框架认识】
  • DPDK 技术详解:榨干网络性能的“瑞士军刀”
  • 英伟达CEO黄仁勋COMPUTEX 2025演讲实录:AI工厂时代已来,Blackwell架构全面投产
  • 【Spring Boot】配置实战指南:Properties与YML的深度对比与最佳实践
  • #Redis缓存篇#(七)分布式缓存
  • 第二次中医知识问答微调