android屏幕截取实现,Android 屏幕截图(底层实现方式)

加载底层库ScreenCap.java:

public class ScreenCap {

static {

System.loadLibrary("scrcap");

}

static native void captureScreenToFile(String fileName);

}

广播接收器:

public class ScreenCapReceiver extends BroadcastReceiver {

private static final String LOG_TAG = "ScreenCapReceiver";

@Override

public void onReceive(Context context, Intent intent) {

// Temp code, should not in main thread

Log.d(LOG_TAG, "generate file name");

//Checking external storage

boolean mExternalStorageWriteable = false;

String state = Environment.getExternalStorageState();

if (Environment.MEDIA_MOUNTED.equals(state)) {

mExternalStorageWriteable = true;

} else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {

mExternalStorageWriteable = false;

} else {

mExternalStorageWriteable = false;

}

if (!mExternalStorageWriteable)

return;

File file = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "SCRCAP_"+System.currentTimeMillis()+".png");

Log.d(LOG_TAG, "Capture screen to : " + file.getAbsolutePath());

ScreenCap.captureScreenToFile(file.getAbsolutePath());

Log.d(LOG_TAG, "screen captured");

}

}

ScreenCap.cpp:

#include

#include

#include

#include

#include

#include

#include

#include

#include "com_cust_android_screencap_ScreenCap.h"

using namespace android;

/*

* Class: com_cust_android_screencap_ScreenCap

* Method: captureScreenToFile

* Signature: (Ljava/lang/String;)V

*/

JNIEXPORT void JNICALL Java_com_cust_android_screencap_ScreenCap_captureScreenToFile

(JNIEnv *env, jclass clazz, jstring fileName) {

const String16 name("SurfaceFlinger");

sp composer;

getService(name, &composer);

sp heap;

uint32_t w, h;

PixelFormat f;

status_t err = composer->captureScreen(0, &heap, &w, &h, &f, 0, 0);

if (err != NO_ERROR) {

fprintf(stderr, "screen capture failed: %s\n", strerror(-err));

return;

}

LOGD("screen capture success: w=%u, h=%u, pixels=%p\n",

w, h, heap->getBase());

SkBitmap b;

b.setConfig(SkBitmap::kARGB_8888_Config, w, h);

b.setPixels(heap->getBase());

SkImageEncoder::EncodeFile(env->GetStringUTFChars(fileName, 0), b,

SkImageEncoder::kPNG_Type, SkImageEncoder::kDefaultQuality);

}

JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved) {

return JNI_VERSION_1_6;

}

JNIEXPORT void JNICALL JNI_OnUnload(JavaVM* vm, void* reserved) {

}

一个用于以编程方式在Android上捕获屏幕截图的库-Android开发 屏幕快照该库结合了MediaProjection,PixelCopy和Canvas绘图,并提供了一个易于使用的API,该API从Android框架及其底层机制的复杂性中抽象而来,以精确捕获屏幕快照库结合了MediaProjection,PixelCopy和Canvas绘图并提供了一个易于使用的API,该API从Android框架及其底层机制的复杂性中抽象出来,可精确捕获用户在屏幕上看到的内容。 该示例应用程序显示了如何使用该库。 Gradle将此添加到您的依赖项块。 实现'eu.bolt:screenshotty:1.0.2'要使用React性包装,还需要添加:实现'eu.bolt:screenshotty-rx:1.0.2'Wiki General If 立即下载

相关推荐

避坑指南:为什么你的conda环境装不上Mamba?从CUDA到ABI的深度排查

本文深入解析conda环境中安装Mamba架构时常见的CUDA版本冲突、ABI不匹配等问题,提供从基础检查到深度排查的系统化解决方案。针对`causal-conv1d`和`mamba-ssm`安装失败场景,详细讲解PyTorch版本绑定、编译器工具链兼容性等关键技术要点,并给出预编译wheel选择、动态链接库配置等实用修复方案。

weixin_33738555的博客 346

c语言 安卓截图,android上用C语言读取fb0实现截屏,并保存为rgb565的bmp

android上用C语言读取fb0实现截屏,保存为bmp图片,支持16位(rgb565)、24位(rbg888)两种格式数据,并在android2.2和4.0模拟器上验证通过。截屏实现主要有两个方面的工作,读取屏幕数据和生成图片。1.读取屏幕数据只读方式打开显存设备/dev/graphics/fb0,再通过mmap用共享方式(MAP_SHARED)映射到一片内存中,其他地方就可以直接以内存的方式...

weixin_36196164的博客 916

【IC】Redhawk-SC输入件配置

Redhawk sc

u011808788的博客 1777

android后台获取当前屏幕截图(screencap.cpp修改)

本文基于android6.0。首先找到screencap在Android源码中的位置,若不清楚,可以通过在android目录下通过命令find . -name screencap.cpp。本文直接给出路径/android/frameworks/base/cmds/screencap/screencap.cpp。入口函数为main,只要编译就可以直接使用。如果需要将数据传出来,需要利用socket

孔乙己大叔的博客 7650

R语言TCGA数据下载避坑指南:biolinks包实战中的5个常见错误与解决方案

本文详细介绍了使用R语言的TCGAbiolinks包下载TCGA数据时常见的5个错误及其解决方案,包括安装与加载问题、查询构建参数设置、下载中断处理、数据加载格式不匹配以及版本兼容性问题。通过实战案例和代码示例,帮助生物信息学研究者高效获取TCGA数据,避免常见陷阱。

weixin_30892037的博客 84

Kali下RTL8812AU网卡5G抓包精准适配指南

WiFi监听模式是无线安全测试的基础能力,其核心在于网卡驱动对802.11a/n/ac协议栈的完整支持。RTL8812AU系列USB无线网卡因成本低、兼容性广被广泛用于渗透测试,但其芯片版本碎片化(如VA/VC/ACM)与Linux内核演进(6.1~6.5)存在严重适配断层,导致5GHz频段Beacon帧捕获失败、信道切换异常、注入功能残缺等典型问题。技术价值在于突破‘即插即用’幻觉,建立从USB设备ID识别、固件版本校验到射频寄存器级补丁的全链路可控流程。典型应用场景包括CTF无线赛题实战、红蓝对抗中的W

weixin_33783283的博客 763

Android 10.0 截屏流程

通常未通过特殊定制的 Android 系统,截屏都是经过同时按住音量下键和电源键来截屏。本篇文章就只讨论使用这些特殊按键来进行截屏。这里我们就要明白事件是在哪里进行分发拦截的。通过源码的分析,我们发现是在PhoneWindowManager.java 中。

u010345983的博客 5119

Arduino开发实例-EMG 肌肉信号传感器

在医学研究中,测量肌肉的活动、收缩和扩张非常重要。 EMG 肌肉传感器测量肌肉活动并产生信号以显示扩张和收缩量。 因此,输出取决于所选肌肉的活动量。 3 绿色、红色和黄色电极连接到模块,用于传输来自肌肉运动的电信号。

视觉与物联智能 1699

android后台截屏实现(3)--编译screencap

修改好之后就要编译了,screencap的编译是要在源码环境中进行的。          将修改后的screencap.cpp文件替换源码中的原始文件,然后修改screencap的Android.mk文件,修改后的文件如下: [plain] view plain copy LOCAL_PATH:= $(call my-dir)   i

omnispace的博客 3279

DA14531之如何Debug(在线调试、Jlink仿真、串口打印)

在线调试和串口打印调试。在线调试是Keil软件配合Jlink编译、烧录、仿真为一体的,其操作包括:运行、停止、打断点,单步运行等。而串口打印调试,只需打开相关配置,让arch_printf()函数正常输出串口数据。若想在初始化完成后打印arch_printf(“goto Loop\r\n”);波特率为115200,接收到串口消息goto Loop。连好线后,点击仿真按钮,在线Jlink调试。

hejinwu1314的博客 1792

目标检测旋转增强源码带方向

解法1: import cv2 import math import numpy as np import os def get_degree(p1,p0): aaa = math.degrees(math.atan2((p1[1] - p0[1]), (p1[0] - p0[0]))) if aaa < 0: aaa = 360 + aaa aaa = (aaa + 90) if aaa > 360: aa...

jacke121的专栏 2084

Android获取屏幕截图的三种方法

本着博客不重复造车的原则,只谈下自己思路总结,只是提纲具体实现自行Google(另外吐槽一下baidu的搜索机制太特么挫了,对于时间最新文档的权值太低) 1、DecorView获取当前应用的截图     通过decorView.getDrawingCache()来实现。不需要title栏和statusbar的可直接获取到相关高度剪裁。可能会有些webview会截取不到,具体依情况。

vito的专栏 2万+

2023年全国职业院校技能大赛 网络系统管理服务模块 Linux部分讲解

网络系统管理,Linux,服务部署,Chinaskills,2023国赛

weixin_62926639的博客 1549

通过surface.screenshot函数可以获取android视频播放的屏幕截图

最近有些人问我屏幕截图的事情,只能截正常屏幕,而无法截取视频的屏幕。 要有系统权限或者自己的平台就从底层把jar包提取出来。通过surface.screenshot函数,获取屏幕。任何的内容屏幕都可以获取。

DJYOS都江堰操作系统 5573

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Android 获取当前activity的屏幕截图

android 当前activity截屏(不是整个手机屏幕!!)

dj931567261的博客 3916

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Android 5.0之后屏幕截图的方法

截图的几种方法Android获取屏幕截图主要有以下三种方法1、通过view.getDrawingCache()获取指定View的绘制缓存来实现截屏。这种方式Android 5.0之前也可以,且不需要权限。可以截取本应用内任意位置的屏幕截屏,可能会有些webview会截取不到。注意这种方式只能获取当前应用内的截图(连顶部状态栏中的时间等都信息都获取不到,获取到的状态栏是一片空白)。2、通过Linux...

weixin_30530523的博客 159

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Android 5.0之前屏幕截图的方法

截图的几种方法Android获取屏幕截图主要有以下三种方法1、通过view.getDrawingCache()获取指定View的绘制缓存来实现截屏。这种方式Android 5.0之前也可以,且不需要权限。可以截取本应用内任意位置的屏幕截屏,可能会有些webview会截取不到。注意这种方式只能获取当前应用内的截图(连顶部状态栏中的时间等都信息都获取不到,获取到的状态栏是一片空白)。2、通过Linux...

weixin_33893473的博客 232

Android屏幕截图实现 (adbd部分)

http://blog.youkuaiyun.com/yuleslie/article/details/7003431 /android2.1/system/core/adb/framebuffer_service.c  这个里面是DDMS 里面截图通信adbd进程的代码   DDMS那边接到的数据是用JAVA处理的  !   framebuffer_service.c代码如下:

victoryckl的专栏 2801

屏幕截取库Screenshotty:精准捕获每一个像素

屏幕截取库Screenshotty:精准捕获每一个像素 在Android开发中,屏幕截图功能是一个常用且必要的工具。现在,我们向您推荐一款名为Screenshotty的开源库,它利用MediaProjection、PixelCopy以及Canvas绘制技术,提供了一种简洁易用的API,旨在让您远离复杂的Android框架和底层机制,轻松实现精确捕捉用户屏幕的内容。 项目介绍 Screenshott...

gitblog_00021的博客 566

Android第一个程序截图,java – 在Android上截取屏幕截图

这是一个安全漏洞.你应该有一个root设备才能做到这一点.// image naming and path to include sd card appending name you choose for fileString mPath = Environment.getExternalStorageDirectory().toString() + "/" + ACCUWX.IMAGE_AP...

weixin_39733948的博客 173

Android screencap 屏幕截图:从命令行到源码的完整解析

本文深入解析Android screencap屏幕截图的完整流程,从adb命令使用到源码实现。详细介绍了adb与设备的通信机制、SurfaceFlinger服务协作原理,以及图像编码和传输的性能优化技巧,帮助开发者全面掌握Android截图技术。

weixin_33738982的博客 492

告别adb pull,手把手教你用Python脚本自动截取Android屏幕并保存到电脑

本文详细介绍了如何使用Python脚本自动化截取Android屏幕并保存到电脑,告别繁琐的adb pull操作。通过环境准备、核心实现、文件管理及高级集成等步骤,开发者可以快速构建高效的屏幕截图自动化系统,显著提升Android应用调试和测试效率。

weixin_30629653的博客 805

android关于截屏,关于android截屏知识的学习

最近要做手机截取当前屏幕的开发,发了大半天时间在网上找了很多资料,终于有了一个大概的头绪和思路,若有问题望指点,谢谢!目前而言个人了解android有三种截屏方法:1、androidSDK提供的截屏View.getDrawingCache()方法,当这个方法只能截取当前activity的界面,对自己的项目要求有点有同,既然可以实现就拿出来学习学习。测试代码:public class MainAct...

weixin_39968266的博客 298
上一篇: html 语言设置背景图片,css 中background 设置文本框背景图 的方法
下一篇: source命令 android,source命令与“.”点命令
焚海炖鱼
博客等级 码龄8年 29粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值