集成微信分享,分享图片时crash
Lua代码
local size = cc.Director:getInstance():getWinSize()
local texture = cc.RenderTexture:create(size.width, size.height, cc.TEXTURE2_D_PIXEL_FORMAT_RGB_A8888)
texture:setPosition(cc.p(size.width/2, size.height/2))
texture:begin()
self.owner_var.root_node:visit()
texture:endToLua()
texture:saveToFile("share.png", cc.IMAGE_FORMAT_PNG)
local path = cc.FileUtils:getInstance():getWritablePath().."share.png"
Utils.shareImageWxFriend(path) --调用java或者oc的分享功能
java代码
String path = getSDCardDirectory()+"share.png";
File destFile = new File(path);
if (destFile.exists()) {
Log.d("Weixin","delete");
destFile.delete();
}
copyFile(image_path, path, true);
Bitmap srcBmp = getBitmapFromFile(path);
if (srcBmp != null) {
Bitmap bmp = Bitmap.createBitmap(660, 500, Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(bmp);
canvas.save();
Paint p = new Paint();
canvas.drawBitmap(srcBmp, new Rect(238, 70, 898, 570),
new Rect(0, 0, 660, 500), p);
canvas.restore();
srcBmp.recycle();
WXImageObject imgObj = new WXImageObject(bmp);
WXMediaMessage msg = new WXMediaMessage();
msg.mediaObject = imgObj;
Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, THUMB_SIZE, THUMB_SIZE, true);
bmp.recycle();
msg.thumbData = bmpToByteArray(thumbBmp, true);
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction("img");
req.message = msg;
req.scene = SendMessageToWX.Req.WXSceneSession;;
mIWXAPI.sendReq(req);
AppActivity.m_activity.finish();
} else {
Log.d("weixin", "srcBmp is null");
}
调用分享时偶发性的crash,经过分析发现是切换到后台时cocos还在进行绘制,尤其ios是不允许的,会杀掉进程
问题原因:
截图是异步的,不是马上完成的,所以应该等截图功能完成后,在进行分享,
解决办法:
local function share()
local path = cc.FileUtils:getInstance():getWritablePath().."share.png"
Utils.shareImageWxFriend(path) --调用java或者oc的分享功能
end
scheduler.performWithDelayGlobal(share, 1)