模仿豌豆荚以及某些刷机软件获取手机屏幕图片
2013-11-13 09:20
459 查看
昨天花了一下午研究了下系统截屏,可行的方案有俩:
1.手机端:读取/dev/graphics/fb0文件,该文件存储了当前屏幕画面的数据,将此数据转换成图片存储在手机端即可。但美中不足的是需要获取系统root权限。
2.pc端:通过ddms连接手机,以IDevice的getScreenshot()方法获取手机屏幕信息。但缺点是手机需要开启adb调试。
目前应用市场中只有一款ScreenshotIt无需root便能使用,但使用之前经过繁琐的安装步骤,可能也是获取了手机系统root权限.
除此之外,相关软件都必须获取root权限才能截图。红米可以一键截图,但那是定制的rom自带的,PhoneWindowManager中调用系统截图(追到底是:Surface.screenshot(int,int)方法)即可轻松实现。
pc端实现功能相对容易,只需要一个java文件+ddmuilib.jar即可,代码如下:
还有更好的方法需要再努力发掘。
PC端获取手机屏幕图片代码下载地址(包含jar包): http://download.csdn.net/detail/singleton1900/6543671
1.手机端:读取/dev/graphics/fb0文件,该文件存储了当前屏幕画面的数据,将此数据转换成图片存储在手机端即可。但美中不足的是需要获取系统root权限。
2.pc端:通过ddms连接手机,以IDevice的getScreenshot()方法获取手机屏幕信息。但缺点是手机需要开启adb调试。
目前应用市场中只有一款ScreenshotIt无需root便能使用,但使用之前经过繁琐的安装步骤,可能也是获取了手机系统root权限.
除此之外,相关软件都必须获取root权限才能截图。红米可以一键截图,但那是定制的rom自带的,PhoneWindowManager中调用系统截图(追到底是:Surface.screenshot(int,int)方法)即可轻松实现。
pc端实现功能相对容易,只需要一个java文件+ddmuilib.jar即可,代码如下:
import com.android.ddmlib.AdbCommandRejectedException; import com.android.ddmlib.AndroidDebugBridge; import com.android.ddmlib.IDevice; import com.android.ddmlib.RawImage; import com.android.ddmlib.TimeoutException; import java.awt.image.BufferedImage; import java.awt.image.RenderedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; public class DDMScreen { /** * @param args */ public static void main(String[] args) { IDevice device; AndroidDebugBridge.init(false); AndroidDebugBridge bridge = AndroidDebugBridge.createBridge(); waitDeviceList(bridge); IDevice devices[] = bridge.getDevices(); device = devices[0]; try { RawImage rawScreen = device.getScreenshot(); if (rawScreen != null) { boolean landscape = false; BufferedImage image = null; int width2 = landscape ? rawScreen.height : rawScreen.width; int height2 = landscape ? rawScreen.width : rawScreen.height; image = new BufferedImage(width2, height2, BufferedImage.TYPE_INT_RGB); int index = 0; int indexInc = rawScreen.bpp >> 3; for (int y = 0; y < rawScreen.height; y++) { for (int x = 0; x < rawScreen.width; x++, index += indexInc) { int value = rawScreen.getARGB(index); if (landscape) image.setRGB(y, rawScreen.width - x - 1, value); else image.setRGB(x, y, value); } } ImageIO.write((RenderedImage) image, "PNG", new File("C:\\Users\\sjyBing\\Desktop\\123.png")); } } catch (TimeoutException e) { e.printStackTrace(); } catch (AdbCommandRejectedException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } private static void waitDeviceList(AndroidDebugBridge bridge) { int count = 0; while (bridge.hasInitialDeviceList() == false) { try { Thread.sleep(100); // 如果没有获得设备列表,则等待 count++; } catch (InterruptedException e) { } if (count > 300) { // 设定时间超过300×100 ms的时候为连接超时 System.err.print("Time out"); break; } } } }
还有更好的方法需要再努力发掘。
PC端获取手机屏幕图片代码下载地址(包含jar包): http://download.csdn.net/detail/singleton1900/6543671
相关文章推荐
- 获取android 手机屏幕的大小以及动态设置背景图片的两种方法;
- Camera的学习,图片的保存(两种),获取手机图片以及图片信息修改(小的图片浏览器)
- HTC T329手机如何删除系统自带的软件?HTC一键解锁、获取ROOT权限、豌豆荚删除系统软件
- Android获取手机屏幕宽高、状态栏高度以及字符串宽高信息的方法
- Qt for symbian 获取手机屏幕尺寸以及设置程序全屏
- 获取手机的默认屏幕方向——某些平板的方向错误问题
- 获取Android 手机屏幕宽度和高度以及获取Android手机序列号
- 获取手机屏幕大小和图片自动适应大小
- jquery获取 屏幕宽度以及网页可用宽度 以及 给图片src赋值 div赋值
- 获取手机屏幕大小以及横竖屏判断的一段代码
- 利用webView实现加载网络图片居中并适应手机屏幕,以及img设置前缀
- iOS 获取屏幕分辨率 以及放大模式、高清模式区别 和 获取UIImage图片的像素尺寸
- Android获取手机屏幕宽高、状态栏高度以及字符串宽高信息的方法
- 获取手机屏幕分辨率以及DPI的三个方法
- 根据手机屏幕的密度获取drawable对应目录下的图片
- Android手机调用系统相机拍照、裁剪以及获取Url上传图片
- 获取与手机屏幕适中的图片
- Android 获取屏幕尺寸与密度 遇到一个问题,我的地图浮标图片在WVGA手机上正好,在QVGA上就显的太大,所以我要根据屏幕的不同调整浮标的大小使其在QVGA大小合适。有的同事提出了依据
- 【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等)
- 安卓第一次安装与软件更新时显示引导页,其他时候显示别的图片,以及定时进入主页面