在Crosswalk(版本10.39.235.16)下使用cordova-screenshot插件截屏,生成的圖片為黑屏,與其說是Crosswalk的問題痪欲,不如說是cordova-screenshot插件的BUG业踢。
從BUG 2233下的討論,發(fā)現(xiàn)Tony Homer已經(jīng)解決了黑屏的問題瞬沦,參考他的代碼雇锡,修改getBitmap()
方法,如下:
public class Screenshot extends CordovaPlugin {
private Bitmap getBitmap() {
Bitmap bitmap = null;
boolean isCrosswalk = false;
try {
// Class.forName("org.crosswalk.engine.XWalkWebViewEngine");
Class.forName("org.xwalk.core.XWalkView"); // 這里
isCrosswalk = true;
} catch (Exception e) {
}
if(isCrosswalk) {
try {
// TextureView textureView = findXWalkTextureView((ViewGroup)webView.getView());
TextureView textureView = findXWalkTextureView((ViewGroup)webView); // 這里
if (textureView != null) {
bitmap = textureView.getBitmap();
return bitmap;
}
} catch(Exception e) {
}
}
// View view = webView.getView().getRootView();
View view = webView.getRootView(); // 這里
view.setDrawingCacheEnabled(true);
bitmap = Bitmap.createBitmap(view.getDrawingCache());
view.setDrawingCacheEnabled(false);
return bitmap;
}
}
另外在config.xml
中添加:
<preference name="CrosswalkAnimatable" value="true" />
修改Screentshot.js
,原JS文件沒有設(shè)置插件ID边坤,現(xiàn)在將其ID設(shè)置為com.darktalker.cordova.screenshot.ScreenshotPlugin
:
cordova.define("com.darktalker.cordova.screenshot.ScreenshotPlugin", function (require, exports, module) {
var exec = require('cordova/exec'),
cordova = require('cordova'), formats = ['png','jpg'];
function ScreenshotPlugin() {
}
ScreenshotPlugin.prototype = {
save:function(callback,format,quality, filename) {
format = (format || 'png').toLowerCase();
filename = filename || 'screenshot_'+Math.round((+(new Date()) + Math.random()));
if(formats.indexOf(format) === -1){
return callback && callback(new Error('invalid format '+format));
}
quality = typeof(quality) !== 'number'?100:quality;
exec(function(res){
callback && callback(null,res);
}, function(error){
callback && callback(error);
}, "Screenshot", "saveScreenshot", [format, quality, filename]);
},
URI:function(callback, quality){
quality = typeof(quality) !== 'number'?100:quality;
exec(function(res){
callback && callback(null, res);
}, function(error){
callback && callback(error);
}, "Screenshot", "getScreenshotAsURI", [quality]);
}
}
module.exports = new ScreenshotPlugin();
});
調(diào)用插件截屏保存圖片:
navigator.screenshot.save(function(error,res){
if(error){
console.error(error);
}else{
console.log('ok',res.filePath); //should be path/to/myScreenshot.jpg
}
},'jpg',50,'myScreenShot');