1. 采用API做法,这种做法的好处是不需要特殊的权限处理。不过在一种情况下不能用,就是在打开camera的情况下使用这种方法:
private static Bitmap takeScreenShot(Activity activity) { // View是你需要截图的View View view = activity.getWindow().getDecorView(); view.setDrawingCacheEnabled(true); view.buildDrawingCache(); Bitmap b1 = null; try { b1 = view.getDrawingCache(); } catch (OutOfMemoryError e) { // TODO: handle exception } // 获取状态栏高度 Rect frame = new Rect(); activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame); int statusBarHeight = frame.top; System.out.println(statusBarHeight); // 获取屏幕长和高 int width = activity.getWindowManager().getDefaultDisplay().getWidth(); int height = activity.getWindowManager().getDefaultDisplay().getHeight(); // 去掉标题栏 // Bitmap b = Bitmap.createBitmap(b1, 0, 25, 320, 455); Bitmap b = Bitmap.createBitmap(b1, 0, statusBarHeight, width, height - statusBarHeight); view.destroyDrawingCache(); return b; }
2.采用Surface的隐藏方法,不过这种方法需要的源码中重新build.
void takeScreenshot() { // We need to orient the screenshot correctly (and the Surface api seems to take screenshots // only in the natural orientation of the device :!) mDisplay.getRealMetrics(mDisplayMetrics); float[] dims = { mDisplayMetrics.widthPixels, mDisplayMetrics.heightPixels }; float degrees = getDegreesForRotation(mDisplay.getRotation()); boolean requiresRotation = (degrees > 0); if (requiresRotation) { // Get the dimensions of the device in its native orientation mDisplayMatrix.reset(); mDisplayMatrix.preRotate(-degrees); mDisplayMatrix.mapPoints(dims); dims[0] = Math.abs(dims[0]); dims[1] = Math.abs(dims[1]); } // Take the screenshot mScreenBitmap = Surface.screenshot((int) dims[0], (int) dims[1]); // mScreenBitmap = android.view.SurfaceControl.screenshot((int) dims[0], (int) dims[1]); if (mScreenBitmap == null) { // notifyScreenshotError(mContext, mNotificationManager); // finisher.run(); Log.i("W", "mScreenBitmap null"); return; } if (requiresRotation) { // Rotate the screenshot to the current orientation Bitmap ss = Bitmap.createBitmap(mDisplayMetrics.widthPixels, mDisplayMetrics.heightPixels, Bitmap.Config.ARGB_8888); Canvas c = new Canvas(ss); c.translate(ss.getWidth() / 2, ss.getHeight() / 2); c.rotate(degrees); c.translate(-dims[0] / 2, -dims[1] / 2); c.drawBitmap(mScreenBitmap, 0, 0, null); c.setBitmap(null); // Recycle the previous bitmap mScreenBitmap.recycle(); mScreenBitmap = ss; } // Optimizations mScreenBitmap.setHasAlpha(false); mScreenBitmap.prepareToDraw(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss_SS"); String name = sdf.format(new Date()) + ".jpg"; savePic(mScreenBitmap, name); // Start the post-screenshot animation // startAnimation(finisher, mDisplayMetrics.widthPixels, mDisplayMetrics.heightPixels, statusBarVisible, navBarVisible); }
3.采用命令的方式,这种方式的4.0之后都可以(包括4.0),如果要在程序中实现,需要系统权限。
screencap /mnt/sdcard/screen.png
4.0之后也提供screenrecord录制屏幕的方法:
screenrecord --h Usage: screenrecord [options] <filename> Records the device's display to a .mp4 file. Options: --size WIDTHxHEIGHT Set the video size, e.g. "1280x720". Default is the device's main display resolution (if supported), 1280x720 if not. For best results, use a size supported by the AVC encoder. --bit-rate RATE Set the video bit rate, in megabits per second. Default 4Mbps. --time-limit TIME Set the maximum recording time, in seconds. Default / maximum is 180. --rotate Rotate the output 90 degrees. --verbose Display interesting information on stdout. --help Show this message. Recording continues until Ctrl-C is hit or the time limit is reached.
相关推荐
Android截屏截图的几种方法总结 Android截屏截图是 Android 开发中常见的需求, Android 截屏截图方法汇总将为您带来多种截屏截图方法的总结,让您更好地掌握 Android 截屏截图技术。在本文中,我们将探讨 ...
本文将详细介绍如何在Android中实现`SurfaceView`的截屏功能。 首先,了解`SurfaceView`的基本原理。`SurfaceView`创建了一个独立的窗口,并在自己的Surface上绘制内容。这使得它可以在后台线程进行高效的绘制,但...
是android轻量级的截屏工具非常的好用 1.把脚本放入指定目录下面: C:\Users\****\AppData\Local\Android\Sdk\platform-tools 2.把用手机打开想要截图的页面双击运行此脚本,图片就截取到脚本所在的文件夹
- **API调用**:Android提供了多种截屏方式,其中一种是通过Java代码调用`WindowManager`的`getDefaultDisplay()`方法获取屏幕尺寸,然后使用`View`的`draw()`方法将屏幕内容绘制到`Bitmap`对象上。此外,还可以...
`ScreenShotSample_android截屏_DEMO_android截屏demo` 提供了一个Android客户端实现截屏服务的示例项目,帮助开发者了解如何在应用程序中集成截屏功能。下面将详细阐述这个DEMO涉及的核心知识点及其实现方法。 1. ...
本示例“Android截屏示例demo”旨在教你如何通过执行ADB(Android Debug Bridge)shell命令来实现这一功能。ADB是Android开发者的重要工具,它允许你通过命令行与连接的Android设备进行交互,包括安装应用、调试、...
在Android操作系统中,"android截屏(root)"是指通过获取设备的root权限来实现更高级别的屏幕截图功能。root是Android系统中的一个概念,它允许用户获取到系统的最高权限,能够访问和修改系统级别的文件,包括那些...
总结,VLC-Android 2.16版本在截图和录像方面提供了全面的支持,无论是在32位还是64位的Android设备上都能流畅运行。这些功能的实现依赖于VLC强大的多媒体处理技术,以及对Android平台的深入理解和优化。VLCTEST则为...
要实现在Android中截屏,你需要调用`ActivityManager.RunningAppProcessInfo.isForeground()`方法来判断当前应用是否处于前台,如果在后台,则启动IntentService。在Service中,你可以使用`WindowManager`接口添加一...
Bitmap是Android图形库中的一种图像数据结构,用于存储像素信息。要将一个View转换为Bitmap,我们可以使用`View.draw(Canvas)`方法,这个方法会将View的内容绘制到指定的Canvas上。然后,我们可以通过`Bitmap.create...
在Android平台上,截屏和录制屏幕是两种常见的功能,它们对于开发者调试应用、用户分享屏幕内容或制作教程视频都有重要作用。接下来,我们将深入探讨这两种技术的实现原理。 **一、Android 截屏** 1. **获取屏幕...
以下是对"android截屏保存为图片"这个主题的详细说明。 **一、Android系统中的截屏原理** 在Android系统中,截屏操作通常涉及到两个关键组件:SurfaceFlinger服务和WindowManager服务。SurfaceFlinger是负责将应用...
Android系统自API 21(Lollipop)开始提供了录屏API,但对第三方应用有诸多限制。VLC SDK提供了一种替代方法,通过其内建的屏幕捕获和编码能力实现录屏。 - 获取屏幕尺寸和密度,设置编码参数。 - 初始化VLC SDK...
在Android平台上,实现截屏功能...总之,Android截屏功能的实现主要涉及对View的操作,包括获取根View、强制绘制、转换为Bitmap以及保存为文件等步骤。了解这些知识点,可以帮助开发者在自己的应用中轻松添加截屏功能。
本项目“android jni 屏幕截图 NativeScreenCapture”专注于利用JNI技术来实现Android设备的屏幕截图功能。下面将详细介绍这个过程涉及的关键知识点。 1. **JNI基础**:JNI是Android平台上的一个接口,它为Java应用...
在Android系统中,截屏是用户日常操作的一部分,主要用于记录屏幕内容或分享给他人。而无需root权限的截图方式更是受到广泛欢迎,因为root设备可能会带来安全风险。本主题主要探讨如何通过C++来实现这一功能,并解析...
Android 2.3中的截屏功能可以通过JNI(Java Native Interface)来实现,这是一种在Java程序中调用本地(C/C++)代码的技术。JNI允许开发者利用Java的跨平台特性,同时利用C/C++的强大性能和低级别操作能力。在这个场景下...
Android MediaProjection截屏&录屏 1、解决Android Q中java.lang.SecurityException: Media projections require a foreground service of type ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION 异常 2、...
实现android三指截屏功能