cocos2dx接入微信sdk,分享文本和截图
2017-11-24 12:01
411 查看
原创链接 http://blog.csdn.net/a704020443/article/details/78623219
首先,你得拥有一个微信开放平台,需要一个AppID。
然后在微信平台下,下载开发工具包,放在android下的libs文件里面。比如:libammsdk.jar
然后在AndroidManifest.xml中添加权限。
下面开始写java代码。
首先在android下的src创建文件夹,比如:src\com\share\game。
建立一个WXapi.java
引入一些要用的包。
在一个WXapi的class里面,定义一些必要的属性,比如wx_api和app_id。还有sContext。
然后在这两行代码中开始注册。
这里的app_id就是你开放平台的id。
下面则是写的微信分享文本,其中分享或收藏的目标场景,通过修改scene场景值实现。
发送到聊天界面——WXSceneSession
发送到朋友圈——WXSceneTimeline
添加到微信收藏——WXSceneFavorite
然后这是微信分享图片到朋友圈。
这里面的buildTransaction()函数文档里面没有,需要自己重写。
还有在分享图片的Util.bmpToByteArray(),这个东西也没有,也需要自己在同目录下写一个util的类。
好了,以上就是分享到微信的java代码,然后我自己也写了一个主要测试在android中访问图片的一个函数。我从外面获取到路径path,然后我在android上去显示出来。由于是因为android渲染,所以要在UI线程里面跑。
当然,我这里是修改了Cocos2dxActivity.java的代码,把mFrameLayout的属性变成了public。以便于这里的访问。
或许有其他更好的方法,请指教。
还有一个被忽视的重要java代码。那就是微信的回调。
还是在src目录下新建一个文件,比如:src\wxapi 目录里面。
新建立一个WXEntryActivity.java。
然后引入WXapi。
具体代码如下:
在androidManifest.xml里面添加
其中WXapi.getWX();是在WXapi.java中的一个静态函数,主要是为了返回wx_api。
好了,接下来就是jni交互时间。
首先,调用分享文本,无参数调用。
可以写在按钮响应事件里面。
接下来是,截图,然后获取路径,传入到java里面。
上面是截图代码,str是路径。其中传入java中string要变为char*,并且还要经过转换为jstring才能开始传入。
还有一个jni的交互的问题,在getStaticMethodInfo()的参数里面后面那个v表示无返回,但是,你会传入一个string类型的参数,所以在前面的括号里面要填写string的类型。叫做签名好像。
有一个注意点,截图后,不要马上分享,或者读取,因为有可能没有保存完毕,你就访问了后,就会报错,所以,等一下再访问就没有问题了。
下面我会把我的这一份测试代码上传。
资源路径http://download.csdn.net/download/a704020443/10131205
首先,你得拥有一个微信开放平台,需要一个AppID。
然后在微信平台下,下载开发工具包,放在android下的libs文件里面。比如:libammsdk.jar
然后在AndroidManifest.xml中添加权限。
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
下面开始写java代码。
首先在android下的src创建文件夹,比如:src\com\share\game。
建立一个WXapi.java
引入一些要用的包。
import com.tencent.mm.opensdk.modelmsg.SendMessageToWX; import com.tencent.mm.opensdk.modelmsg.WXImageObject; import com.tencent.mm.opensdk.modelmsg.WXMediaMessage; import com.tencent.mm.opensdk.modelmsg.WXTextObject; import com.tencent.mm.opensdk.modelmsg.WXWebpageObject; import com.tencent.mm.opensdk.openapi.IWXAPI; import com.tencent.mm.opensdk.openapi.WXAPIFactory;
在一个WXapi的class里面,定义一些必要的属性,比如wx_api和app_id。还有sContext。
然后在这两行代码中开始注册。
这里的app_id就是你开放平台的id。
private static IWXAPI wx_api; private static Cocos2dxActivity sContext = (Cocos2dxActivity) Coco 4000 s2dxActivity.getContext(); public static final String APP_ID = "wx3d4e39axxxxxxxx"; wx_api = WXAPIFactory.createWXAPI(sContext, APP_ID, true); wx_api.registerApp(APP_ID);
下面则是写的微信分享文本,其中分享或收藏的目标场景,通过修改scene场景值实现。
发送到聊天界面——WXSceneSession
发送到朋友圈——WXSceneTimeline
添加到微信收藏——WXSceneFavorite
public static void shareToWX(){ String strText = "this is my WX share"; WXTextObject textObj = new WXTextObject(); textObj.text = strText; WXMediaMessage msg = new WXMediaMessage(); msg.description = strText; msg.mediaObject = textObj; SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = buildTransaction("text"); req.message = msg; req.scene = SendMessageToWX.Req.WXSceneSession; wx_api.sendReq(req); }
然后这是微信分享图片到朋友圈。
public static void shareToImg(String path){ Bitmap bmp = BitmapFactory.decodeFile(path); WXImageObject imgObj = new WXImageObject(bmp); WXMediaMessage msg = new WXMediaMessage(); msg.mediaObject = imgObj; //设置缩略图 Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, 150, bmp.getHeight() * 150 / bmp.getWidth(), true); bmp.recycle(); msg.thumbData = Util.bmpToByteArray(thumbBmp, true); SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = buildTransaction("img"); req.message = msg; req.scene = SendMessageToWX.Req.WXSceneTimeline; wx_api.sendReq(req); }
这里面的buildTransaction()函数文档里面没有,需要自己重写。
private static String buildTransaction(final String type) { return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis(); }
还有在分享图片的Util.bmpToByteArray(),这个东西也没有,也需要自己在同目录下写一个util的类。
public class Util { public static byte[] bmpToByteArray(final Bitmap bmp, final boolean needRecycle) { ByteArrayOutputStream output = new ByteArrayOutputStream(); bmp.compress(CompressFormat.PNG, 100, output); if (needRecycle) { bmp.recycle(); } byte[] result = output.toByteArray(); try { output.close(); } catch (Exception e) { e.printStackTrace(); } return result; } }
好了,以上就是分享到微信的java代码,然后我自己也写了一个主要测试在android中访问图片的一个函数。我从外面获取到路径path,然后我在android上去显示出来。由于是因为android渲染,所以要在UI线程里面跑。
当然,我这里是修改了Cocos2dxActivity.java的代码,把mFrameLayout的属性变成了public。以便于这里的访问。
或许有其他更好的方法,请指教。
public static String _path = null; public static void showToImg(String path){ _path = path; sContext.runOnUiThread(new Runnable(){ @Override public void run(){ Bitmap bmp = BitmapFactory.decodeFile(_path); ImageView image = new ImageView(sContext); image.setImageBitmap(bmp); ViewGroup.LayoutParams lypt=new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); image.setLayoutParams(lypt); sContext.mFrameLayout.addView(image); } }); }
还有一个被忽视的重要java代码。那就是微信的回调。
还是在src目录下新建一个文件,比如:src\wxapi 目录里面。
新建立一个WXEntryActivity.java。
然后引入WXapi。
import com.share.game.WXapi
具体代码如下:
public class WXEntryActivity extends Activity implements IWXAPIEventHandler { @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); WXapi.getWx().handleIntent(getIntent(), this); } @Override public void onReq(BaseReq arg0) { Log.d("Mohjong onReq", "11111111111111111111111111msg from wx"); this.finish(); } @Override public void onResp(BaseResp resq) { Log.d("Mohjong onResp", "2222222222222222222222222msg from wx"); } }
在androidManifest.xml里面添加
<activity android:name="wxapi.WXEntryActivity1111" android:label="@string/app_name" android:exported="true" />
其中WXapi.getWX();是在WXapi.java中的一个静态函数,主要是为了返回wx_api。
好了,接下来就是jni交互时间。
首先,调用分享文本,无参数调用。
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //shareToWX JniMethodInfo t; bool ishave = JniHelper::getStaticMethodInfo(t, "com/share/game/WXapi", "shareToWX", "()V"); if (ishave) { t.env->CallStaticVoidMethod(t.classID, t.methodID); } #endif
可以写在按钮响应事件里面。
接下来是,截图,然后获取路径,传入到java里面。
Size winSize = Director::getInstance()->getWinSize(); RenderTexture* render = RenderTexture::create(winSize.width, winSize.height); render->begin(); this->getParent()->visit(); render->end(); render->saveToFile("share.png", Image::Format::PNG); std::string str = FileUtils::sharedFileUtils()->getWritablePath() + "share.png";
上面是截图代码,str是路径。其中传入java中string要变为char*,并且还要经过转换为jstring才能开始传入。
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) std::string str = FileUtils::sharedFileUtils()->getWritablePath() + "share.png"; JniMethodInfo t; bool ishave = JniHelper::getStaticMethodInfo(t, "com/share/game/WXapi", "shareToImg", "(Ljava/lang/String;)V"); jstring _path = t.env->NewStringUTF(str.c_str()); if (ishave) { t.env->CallStaticVoidMethod(t.classID, t.methodID, _path); } #endif
还有一个jni的交互的问题,在getStaticMethodInfo()的参数里面后面那个v表示无返回,但是,你会传入一个string类型的参数,所以在前面的括号里面要填写string的类型。叫做签名好像。
有一个注意点,截图后,不要马上分享,或者读取,因为有可能没有保存完毕,你就访问了后,就会报错,所以,等一下再访问就没有问题了。
下面我会把我的这一份测试代码上传。
资源路径http://download.csdn.net/download/a704020443/10131205
相关文章推荐
- cocos2dx3.15接入微信SDK实现登录和分享android studio2.3.3
- 关于XCode里导入cocos2dx项目接入微信分享SDK问题!
- cocos2dx接入微信分享(IOS)
- 不接入微信sdk,在APP中实现微信分享,支付
- 微信分享SDK接入——Java
- iOS开发 - 微信之简单文本分享(集成官方SDK)
- 微信分享SDK接入——Java
- 微信分享SDK接入——Java
- Android微信之简单文本分享(集成官方SDK-Android Studio)
- Android微信SDK分享功能接入
- 最新版安卓微信分享sdk接入
- Android微信之简单文本分享(集成官方SDK-Android Studio)
- Cocos2dx 接入友盟社会化分享-微信分享
- iOS UIActivityViewController 接入WeChatSDK 微信 朋友圈分享
- 不接入微信sdk,在APP中实现微信分享,支付
- 微信登陆SDK接入 微信 qq 新浪 登陆&&分享
- cocos2dx接入微信分享!
- cocos2d手游之微信分享SDK接入指南
- 第三方网站接入微信JS-SDK的分享自定义设置,微信分享小图标以及标题
- android 微信 以及QQ的SDK接入分享功能遇到的些问题小结