博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 屏幕截图(底层实现方式)
阅读量:6681 次
发布时间:2019-06-25

本文共 2396 字,大约阅读时间需要 7 分钟。

加载底层库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) {}

下载源码:

 

转载地址:http://zbnao.baihongyu.com/

你可能感兴趣的文章
《中国人工智能学会通讯》——1.33 基础模型
查看>>
Consensus Attention-based Neural Networks for Chinese Reading
查看>>
Angular-个人整理
查看>>
Beten交易所与市场投资者共同发掘数字资产价值
查看>>
linux 环境变量
查看>>
C#基础知识整理:基础知识(14) 数组
查看>>
Maven多模块项目使用Jenkins分析代码的配置
查看>>
jQery Ajax 执行顺序
查看>>
一篇文章教你看懂Photoshop和Sketch
查看>>
【多图软文】使用Team@OSC进行团队协作
查看>>
阻止文字选中
查看>>
Spring Cloud搭建微服务架构----使用Spring boot开发web项目
查看>>
python 时间格式转化成毫秒
查看>>
java一些需要掌握的知识点
查看>>
CentOS 6.2 yum安装配置lnmp服务器(Nginx+PHP+MySQL)
查看>>
Redis学习手册 比较全面
查看>>
SpringLDAP-Reference (中文文档四)
查看>>
JQuery上传插件Uploadify使用详解
查看>>
(二)线程同步_6---修改锁的竞争原则
查看>>
Intent跳转时,activity的生命周期
查看>>