参考链接:https://www.jianshu.com/p/b275e818de6a
思路:
1. 通过 ZXing 库获得二维码的Bitmap
2. 将Bitmap 保存到本地图片(注意存储路径)
3. jsb读取路径替换spriteFrame
Android关键代码:
public static int saveBitmapToLocal(String url){
String savePath =app.getFilesDir().getAbsolutePath() +"/QRCodeImg.png";
Bitmap img =createQRCodeBitmap(url,480,480);
File filePic;
try {
filePic =new File(savePath);
if (!filePic.exists()) {
filePic.getParentFile().mkdirs();
filePic.createNewFile();
}
FileOutputStream fos =new FileOutputStream(filePic);
img.compress(Bitmap.CompressFormat.PNG,100, fos);
fos.flush();
fos.close();
}catch (IOException e) {
return -1;
}
return 0;
}
ccc关键代码:
refreshQrCode:function(){
let spriteFrame = null;
let fileName = "QRCodeImg";
let url = jsb.fileUtils.getWritablePath() + fileName + ".png";
if (jsb.fileUtils.isFileExist(url)){
spriteFrame = new cc.SpriteFrame(url);
this.qrCodeSprite.spriteFrame = spriteFrame;
}else{
if (cc.sys.OS_ANDROID == cc.sys.os) {
console.log("android creator: current platform is cc.sys.OS_ANDROID");
let url = "https://www.baidu.com";
let result = jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity", "saveBitmapToLocal", "(Ljava/lang/String;)I",url);
if (result === 0){
console.log("android save qrCoede success");
this.refreshQrCode();
}else if (result === -1){
console.log("android save qrCoede failure");
}else{
console.log("i can't understand");
}
}
}
}
ps:
① ZXing简介:ZXing全称zebra crossing,翻译过来就是『斑马线』的意思。ZXing是一个采用Java实现的、开源的、支持多格式(一维/二维)的条形码图像处理库。
② jsb.fileUtils.getWritablePath() 在android平台下获取的路径为/data/user/0/org.cocos2d.scratchCard/files,
③ android平台需要使用app.getFilesDir().getAbsolutePath()获取路径;
网友评论