安卓基础(代码解析)

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全局可见公开的常量(如数学常数、版本号)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奶龙牛牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值