`
貌似掉线
  • 浏览: 260442 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

在PC端进行android截屏的多种方法

阅读更多
昨晚意外的发现在PC端进行截屏的方法相当多,在android sdk的tools里面有大量的jar包可以利用。
第一种方法:
这里使用AndroidDebugBridge及其相关类进行截屏,使用的jar包是ddmlib.jar,在android sdk的tools文件夹内。
代码如下(以下代码抽取自互联网并经修改过):
/*
 * @(#)ScreenShot.java	       Project:lianmeng
 * Date-Time:2013-10-11 下午1:08:36
 *
 * Copyright (c) 2013 CFuture09, Institute of Software, 
 * Guangdong Ocean University, Zhanjiang, GuangDong, China.
 * All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package pw.msdx.lianmengassistant;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

import com.android.ddmlib.AndroidDebugBridge;
import com.android.ddmlib.IDevice;
import com.android.ddmlib.RawImage;

/**
 * copy from http://bbs.csdn.net/topics/390502035. modify by Geek_Soledad
 */
public class AdbUtil {
	public static IDevice connect() {
		// init the lib
		// [try to] ensure ADB is running
		String adbLocation = System.getProperty("com.android.screenshot.bindir"); //$NON-NLS-1$
		if (adbLocation != null && adbLocation.length() != 0) {
			adbLocation += File.separator + "adb"; //$NON-NLS-1$
		} else {
			adbLocation = "adb"; //$NON-NLS-1$
		}

		AndroidDebugBridge.init(false /* debugger support */);

		AndroidDebugBridge bridge = AndroidDebugBridge
				.createBridge(adbLocation, true /* forceNewBridge */);

		// we can't just ask for the device list right away, as the internal
		// thread getting
		// them from ADB may not be done getting the first list.
		// Since we don't really want getDevices() to be blocking, we wait
		// here manually.
		int count = 0;
		while (bridge.hasInitialDeviceList() == false) {
			try {
				Thread.sleep(100);
				count++;
			} catch (InterruptedException e) {
				// pass
			}

			// let's not wait > 10 sec.
			if (count > 100) {
				System.err.println("Timeout getting device list!");
				return null;
			}
		}

		// now get the devices
		IDevice[] devices = bridge.getDevices();

		if (devices.length == 0) {
			System.out.println("No devices found!");
			return null;
		}

		return devices[0];
	}

	public static BufferedImage screenShot(IDevice device) {
		RawImage rawImage;
		try {
			rawImage = device.getScreenshot();
		} catch (Exception ioe) {
			System.out.println("Unable to get frame buffer: " + ioe.getMessage());
			return null;
		}

		// device/adb not available?
		if (rawImage == null)
			return null;

		// convert raw data to an Image
		BufferedImage image = new BufferedImage(rawImage.width, rawImage.height,
				BufferedImage.TYPE_INT_ARGB);

		int index = 0;
		int IndexInc = rawImage.bpp >> 3;
		for (int y = 0; y < rawImage.height; y++) {
			for (int x = 0; x < rawImage.width; x++) {
				int value = rawImage.getARGB(index);
				index += IndexInc;
				image.setRGB(x, y, value);
			}
		}
		return image;
	}

	/**
	 * Grab an image from an ADB-connected device.
	 */
	public static boolean screenShotAndSave(IDevice device, String filepath) throws IOException {
		boolean result = ImageIO.write(screenShot(device), "png", new File(filepath));
		if (result) {
			System.out.println("file is saved in:" + filepath);
		}
		return result;
	}

	public static void terminate() {
		AndroidDebugBridge.terminate();
	}
}


第二种方法:
使用monkeyrunner.jar包,当然还要添加相关jar包。由于新版的API改变,不知道其中参数应该怎么传,未深入去做。

第三种方法,使用chimpchat.jar及相关jar包(common.jar,guava-13.0.1.jar),代码大致如下:
		AdbBackend adb = new AdbBackend();
		IChimpDevice device = adb.waitForConnection();
		ImageIO.write(device.takeSnapshot().createBufferedImage(), "png", new File("E:\\tmp.png"));
		device.dispose();
		if (adb != null) {
			adb.shutdown();
		}

但是执行之后,程序没有停止下来,不知如何才能使其终止。
0
0
分享到:
评论

相关推荐

    PC端PPC屏幕截图软件

    在PC端使用PPC截图软件时,通常需要通过数据线、蓝牙或红外线等方式将PPC设备与电脑连接。软件安装后,用户可以通过图形用户界面操作,选择捕获整个屏幕、活动窗口或者自定义区域。捕获的图像可以被保存为常见的图像...

    mobile-PC端截屏软件

    《mobile-PC端截屏软件:Pocket Snapshot_V2.5深度解析》 在数字化时代,截屏工具已经成为我们日常工作中不可或缺的一部分,无论是分享信息、记录屏幕动态还是进行问题反馈,都离不开它的身影。今天,我们要深入...

    Android PC机摄像头摄像数据在Android手机上同步显示的源.zip

    该压缩包文件“Android PC机摄像头摄像数据在Android手机上同步显示的源.zip”涉及到的知识点主要集中在Android应用开发和视频流同步技术上。这里我们将深入探讨如何实现这一功能,以及可能涉及的关键技术和挑战。 ...

    Android系列教程(一) 与PC端的USB互连.

    ### Android系列教程(一) 与PC端的USB互连 #### Android简介 Android是由Google开发的一款基于Linux平台的开源手机操作系统。它包含了操作系统、用户界面以及应用程序等移动电话工作所需的全套软件。与传统的封闭...

    android 投影工具使用方法.rar

    这时,一款名为VysorPro的Android投影工具应运而生,它为开发者和普通用户提供了PC端控制Android设备的强大功能,无需Root权限,且不受WiFi密码限制,极大地简化了远程操作和演示过程。 VysorPro是Google Play商店...

    Android应用源码安卓与PC的Socket通信项目java版

    通过这个项目,开发者可以学习到如何在Android应用中实现Socket通信,以及如何在PC端搭建服务器。这不仅有助于理解网络编程的基本原理,还能提升实际项目中的跨平台通信能力。在实际应用中,这种技术可以用于远程...

    Android远程桌面连接到PC源码

    在Android平台上实现远程桌面连接到PC的功能,通常涉及到Remote Desktop Protocol(RDP)技术,这是一种由微软开发的协议,允许用户通过网络访问Windows操作系统上的图形界面。本项目提供了实现这一功能的源码,且...

    安卓Android源码——Android应用源码之 实现远程控制PC源代码.zip

    在本压缩包中,我们关注的是一个特定的Android应用程序源码,它的主要功能是实现从Android设备远程控制个人计算机(PC)。这个应用的核心技术涉及到了Android的网络编程、多线程处理以及可能的图形用户界面设计。...

    Android应用源码之Android应用源码安卓与PC的Socket通信项目java版.zip

    该压缩包文件“Android应用源码之Android应用源码安卓与PC的Socket通信项目java版.zip”是一个关于Android应用程序和PC之间通过Socket进行通信的示例项目。在Android开发中,Socket通信是一种常见的方式,用于设备间...

    androidjava源码-Android_Screenshot:来自PC的C++android屏幕截图。通过AndroidDDMS源代码将J

    此外,C++库可以在多种操作系统上编译和运行,这使得PC端的截图工具可以支持Windows、Mac OS甚至Linux等不同平台。 4. **源码结构与功能**:在Android_Screenshot-master文件夹中,可能包含了以下部分: - `src`...

    Android电脑源码通过adb实现实时屏幕演示

    在Android开发过程中,有时我们需要对设备的屏幕进行实时演示,比如在调试应用或者进行教学时。这个场景下,我们可以利用Android Debug Bridge(ADB)工具来实现。本文将详细讲解如何通过ADB实现在电脑上实时展示...

    Android开发问题集锦 情人节特刊

    PC端可以通过使用Android Debug Bridge (ADB)工具,而手机端可以通过Linux通用的方法,读取`dev/graphics/fb0`文件实现截图。不过,使用Java层直接读取的方式尚未成熟,通过NDK可以直接读取,但是需要开发者自己进行...

    android 项目源码下载:17套摄影图像类项目

    android 项目源码下载:17套摄影图像类项目,详情如下: Android 3D相册图片滑动+倾斜+放大+倒影处理源码.rar ...PC机摄像头摄像数据在Android手机上同步显示的源.rar 调用系统相册和系统照相机功能雨实例源码.rar

    荐片播放器_PC+安卓.zip

    在技术层面上,安卓版的APK文件通常包含了应用程序的全部代码、资源和配置,安装后能在Android系统上运行。而PC版的exe文件则是一个Windows可执行程序,需要与Windows操作系统兼容的环境才能运行。两者都可能包含...

    Android Debug Bridge含使用说明 超简单

    - **截屏与录屏**: `adb exec-out screencap -p &gt; screenshot.png`保存屏幕截图,`adb shell screenrecord /sdcard/recording.mp4`录制视频。 - **数据备份与恢复**: `adb backup -apk -shared -all -f backup.ab`...

    手机控制PC机

    "手机控制PC机"这一主题涵盖了多种技术和方法,允许用户通过智能手机远程控制、管理或监控个人计算机。本文将深入探讨这一领域的核心概念和技术。 首先,手机与PC之间的通信通常基于网络协议,其中最常用的是TCP/IP...

    UnboxingAndroidUSB翻译

    在主机(Host)端,ADB Server与Client交互,而在Android设备端,ADB Daemon运行,它们之间通过USB或网络连接进行通信。ADB的主要功能包括设备管理、日志收集、shell命令执行等,对于开发者而言,是进行Android应用...

    android创新实验报告.docx

    - **处理键盘事件**:在SnakeView类中重写`onKeyDown()`方法,根据不同按键值更新蛇的方向。 - **TileView类的设计**:定义基本的绘图单元格,用于构建游戏地图。 - **SnakeView类的设计**:继承自TileView,包含...

    腾讯应用助手for Android4大特色.docx

    腾讯应用助手是一款专为Android用户设计的手机同步管理软件,具有四大主要特色,极大地提升了用户在PC端管理Android设备的便利性。 首先,腾讯应用助手的体积小巧,仅为6.47M,远小于同类软件的16M,使得它在运行时...

    vysor pc工具

    Vysor是一款强大的PC工具,专门用于连接和控制移动端设备,如Android智能手机或平板电脑,以便在个人计算机上查看和操作这些设备的界面。这款工具极大地便利了开发者、测试人员以及那些希望在大屏幕上享受移动体验的...

Global site tag (gtag.js) - Google Analytics