本文概述
- 要求
- 实现
- 已知的问题
要求【如何在Cordova中为你的应用创建屏幕截图】为了在你的应用中创建屏幕截图, 我们将依赖cordova-screenshot插件。屏幕快照插件使你的应用程序可以获取当前屏幕的屏幕截图, 并将其轻松保存到手机中。
要在你的项目中安装此插件, 请在命令提示符下执行以下命令:
cordova plugin add https://github.com/gitawego/cordova-screenshot.git
屏幕快照插件使你的应用程序可以获取当前屏幕的屏幕截图并将其保存到手机中。该插件将在浏览器的导航器对象中创建一个名为screenshot的属性, 并将公开2个方法(保存和URI)。
实现该插件与其他插件不同的地方在于, 它会检查你的cordova项目(在Android中)是否使用XWalkWebViewEngine或android网络视图, 并根据此分别创建屏幕截图。在iOS中, 它将创建屏幕大小的位图上下文, 并使用UIGraphicsBeginImageContextWithOptions和UIGraphicsGetImageFromCurrentImageContext创建图像, 最后将图像转换为JPEG(在iOS中仅支持JPEG), 然后保存(或返回base64 uri) 。
创建并保存屏幕截图
iOS和Android中的插件都需要在设备存储中创建文件(图片)(/ s??dcard / Pictures for android)。但是, 你无法设置屏幕截图的位置。生成的屏幕截图所在的路径将在响应回调中返回(如果你需要设置屏幕截图的位置, 则可以使用Base64格式检索图像, 然后将其保存, 以获取更多信息, 请阅读下一节” 获取Base64格式的屏幕截图” 。
screenshot.save方法最多需要4个参数(3个可选参数):
- callback:遵循节点异步代码样式的回调。回调接收2个参数, 错误[1]和响应[2, 一个具有filePath属性的对象]。
- 格式:指定图像所需格式的字符串(png或jpg)。
- 质量:0到100之间的整数, 指定图像的质量(如果有)。
- 文件名:你可以根据需要更改图像的文件名, 否则将生成一个随机名称(screenshot_XXXXXXXXXX.jpg)。
navigator.screenshot.save(function(error, response){if(error){console.error(error);
return;
}// Something like: /storage/emulated/0/Pictures/screenshot_1477924039236.jpgconsole.log(response.filePath);
});
此外, 如果要更改质量和输出文件名, 则可以使用:
navigator.screenshot.save(function(error, response){if(error){console.error(error);
return;
}// Something like: /storage/emulated/0/Pictures/myScreenShot.jpgconsole.log(response.filePath);
}, 'jpg', 50, 'myScreenShot');
获取Base64格式的屏幕截图
你可以截取屏幕截图, 并使用screenshot.URI方法将其获取为数据URI。此方法需要2个参数(1个可选):
- callback:遵循节点异步代码样式的回调。回调接收2个参数, 错误[1]和响应[2, 一个具有URI属性的对象]。
- 质量:0到100之间的整数, 指定图像的质量(如果有)。
navigator.screenshot.URI(function(error, response){if(error){console.error(error);
return;
}// Something like: data:image/jpeg;
base64, /9j/4AAQSkZJconsole.log(response.URI);
}, 50);
此插件的唯一限制是自定义文件的输出路径, 但是可以使用本文指定的cordova-file-plugin通过将Base64字符串另存为设备中的映像来创建解决方法。使用本文中描述的方法, 你可以将数据URI作为文件保存在设备中, 并具有所需的目标位置:
/** Process the type1 base64 string **/var myBaseString = "data:image/png;
base64, iVBORw0KGgoAAAANSUhEUgAAAkYAAA.....";
// Split the base64 string in data and contentTypevar block = myBaseString.split(";
");
// Get the content typevar dataType = block[0].split(":")[1];
// In this case "image/png"// get the real base64 content of the filevar realData = http://www.srcmini.com/block[1].split(", ")[1];
// In this case "iVBORw0KGg...."// The path where the file will be createdvar folderpath = "file:///storage/emulated/0/";
// The name of your file, note that you need to know if is .png, .jpeg etcvar filename = "myimage.png";
savebase64AsImageFile(folderpath, filename, realData, dataType);
角度服务
如果你使用的是Angular(离子), 则可以在项目中添加以下服务:
.service('$cordovaScreenshot', ['$q', function ($q){return {capture: function (filename, extension, quality){extension = extension || 'jpg';
quality = quality || '100';
var defer = $q.defer();
navigator.screenshot.save(function (error, res){if (error) {console.error(error);
defer.reject(error);
} else {console.log('screenshot saved in: ', res.filePath);
defer.resolve(res.filePath);
}}, extension, quality, filename);
return defer.promise;
}};
}])
已知的问题在某些android平台上, 主要是在使用人行横道的项目中, 屏幕截图会显示黑色图像。为了防止这种行为, 可以在config.xml文件中添加以下参数:
<
preference name="CrosswalkAnimatable" value="http://www.srcmini.com/true" />
你可以在此处阅读有关该错误的更多信息, 但是自Crosswalk 14起, 该问题似乎已解决。
玩得开心 !
推荐阅读
- 如何在ubuntu 16.04中启动Android模拟器()
- 如何使用Google Chrome调试设备上的Cordova应用
- 如何在Windows中使用ADB在设备中的Cordova Android应用程序中调试Java代码
- 如何用Cordova创建文件
- 如何在Android中的Cordova应用程序中禁用屏幕截图
- 如何用Cordova删除文件
- 如何在Cordova应用程序中在Android上启用实质性本机主题
- 如何加密(保护)Android Cordova应用程序的源代码
- 如何在Android的Cordova应用程序中启用移动到SD卡功能