shareSDK如何只分享图片

前端之家收集整理的这篇文章主要介绍了shareSDK如何只分享图片前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

本文主要是针对cocos creator项目接入shareSDK后的截图分享问题

遇到的问题

  • Android只能分享sdcard下的图片
  • IOS图片必须要在Xcode左边目录里面,也就是必须在包里面
  • 我现在想要分享一个截图,截图是在游戏里面通过一些方法自己生成的,Android中生成图片文件是在游戏的可写路径,不是sdcard,通常游戏引擎也不会支持直接截图存储到sdcard。IOS也是游戏的可写路径

解决方法

  1. Tools.screenShoot = function (func) {
  2. if (!cc.sys.isNative) return;
  3. if (CC_JSB) {
  4. var dirpath = jsb.fileUtils.getWritablePath() + 'ScreenShoot/';
  5. if (!jsb.fileUtils.isDirectoryExist(dirpath)) {
  6. jsb.fileUtils.createDirectory(dirpath);
  7. }
  8. var name = 'ScreenShoot-' + (new Date()).valueOf() + '.png';
  9. var filepath = dirpath + name;
  10. var size = cc.visibleRect;
  11. var rt = cc.RenderTexture.create(size.width,size.height);
  12. cc.director.getScene()._sgNode.addChild(rt);
  13. rt.setVisible(false);
  14. rt.begin();
  15. cc.director.getScene()._sgNode.visit();
  16. rt.end();
  17. rt.saveToFile('ScreenShoot/' + name,cc.ImageFormat.PNG,true,function () {
  18. cc.log('save succ');
  19. rt.removeFromParent(true);
  20. if (func) {
  21. func(filepath);
  22. }
  23. });
  24. }
  25. };

这样得到一个屏幕截图,存储目录在可写路径里。最后返回的filepath这个值就是生成的截图的路径,我们使用js调用java的方法,将filepath传到java层,java拿到图片路径后,直接进行拷贝,代码如下:

  1. public static void copyFile(String oldPath,String newPath) {
  2. try {
  3. int bytesum = 0;
  4. int byteread = 0;
  5. File oldfile = new File(oldPath);
  6. if (oldfile.exists()) { //文件存在时
  7. InputStream inStream = new FileInputStream(oldPath); //读入原文件
  8. FileOutputStream fs = new FileOutputStream(newPath);
  9. byte[] buffer = new byte[1444];
  10. int length;
  11. while ( (byteread = inStream.read(buffer)) != -1) {
  12. bytesum += byteread; //字节数 文件大小
  13. fs.write(buffer,0,byteread);
  14. }
  15. inStream.close();
  16. }
  17. }
  18. catch (Exception e) {
  19. System.out.println("复制单个文件操作出错");
  20. e.printStackTrace();
  21. }
  22. }

这个是静态方法,在js层调用java或者直接在java层调用,把图片复制到sdcard目录下,也可以放到别的目录

  1. copyFile(filepath,"/sdcard/shareImg.png");

这样图片就在sdcard目录下了,可以使用shareSDK的相关方法进行分享

  • IOS
    虽然shareSDK自带截图分享功能,但是shareSDK的截图分享功能是针对一般的手机应用,游戏的渲染和原生应用的渲染原理不一样,渲染层也不一样,所以shareSDK截图总是截出黑图或者透明图。
    ios和android图片分享api不同,android使用setImagePath(imgPath),传入的是图片的路径,ios传入的图片的数据,所以我们只要在ios层把图片的数据读出来再传入就可以了,代码如下:
  1. UIImage * image = [[UIImage alloc] initWithContentsOfFile:imgUrl];
  2. [shareParams SSDKSetupShareParamsByText:content
  3. images:@[image]
  4. url:[NSURL URLWithString:webUrl]
  5. title:title
  6. type:SSDKContentTypeImage];

imgUrl还是在js层获取到的图片路径filepath,这样就可以分享ios截图了。
shareSDK只分享图片功能,有以上这两个引导应该可以满足很多需求了。

如果有什么不懂的或者其他需求,可以在下方留言。

猜你在找的Cocos2d-x相关文章