cocos2d手游之微信分享sdk的安卓源代码
2016-01-21 19:06
387 查看
这是微信分享的一个重要文件,必须放在“工程全名.wxapi”的目录下面。例如工程名为org.cocos2dx.lua,则WXEntryActivity.java就必须建立在org.cocos2dx.lua.wxapi的目录。
1.WXEntryActivity.java
package com.mz.maoxian.lenovo.wxapi;
import java.io.IOException;
import java.io.InputStream;
import org.cocos2dx.lua.AppActivity;
import com.tencent.mm.sdk.openapi.BaseReq;
import com.tencent.mm.sdk.openapi.BaseResp;
import com.tencent.mm.sdk.openapi.ConstantsAPI;
import com.tencent.mm.sdk.openapi.SendMessageToWX;
import com.tencent.mm.sdk.openapi.IWXAPI;
import com.tencent.mm.sdk.openapi.IWXAPIEventHandler;
import com.tencent.mm.sdk.openapi.WXAPIFactory;
import com.tencent.mm.sdk.openapi.WXImageObject;
import com.tencent.mm.sdk.openapi.WXMediaMessage;
import com.tencent.mm.sdk.openapi.WXTextObject;
import com.tencent.mm.sdk.openapi.WXWebpageObject;
import android.app.Activity;
import android.content.Intent;
import android.content.res.AssetManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
private static final int TIMELINE_SUPPORTED_VERSION = 0x21020001;
public static final String APP_ID = "wxc8a10e8a59add48b";
// IWXAPI 是第三方app和微信通信的openapi接口
private static IWXAPI api;
public static void myLog(String str)
{
Log.i("wc", str);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
myLog("onCreate in Weixin entry");
this.initWX();
}
private static String buildTransaction(final String type) {
return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis();
}
public void initWX(){
// 通过WXAPIFactory工厂,获取IWXAPI的实例
api = WXAPIFactory.createWXAPI(this, APP_ID, false);
api.registerApp(APP_ID);
api.handleIntent(getIntent(), this);
}
// private static Bitmap getImageFromAssetsFile(AppActivity activity, String fileName)
// {
// Bitmap image = null;
// AssetManager am = activity.getResources().getAssets();
// try
// {
// InputStream is = am.open(fileName);
// image = BitmapFactory.decodeStream(is);
// is.close();
// }
// catch (IOException e)
// {
// Log.i("wc", "getImageFromAssetsFile error");
// e.printStackTrace();
// }
//
// return image;
//
// }
public static void sendImageWithAPI(IWXAPI api, AppActivity activity, int mode, String smallPng, String bigPng){
Log.i("wc", "smallPng:" + smallPng + " bigPng:" + bigPng);
Bitmap bmpSmall = BitmapFactory.decodeFile(smallPng);
Bitmap bmpBig = BitmapFactory.decodeFile(bigPng);
if(bmpSmall == null){
myLog("bmp is null");
Toast.makeText(activity, "image path not find, path:" + smallPng, Toast.LENGTH_LONG).show();
return;
}
if(bmpBig == null){
myLog("bmp is null");
Toast.makeText(activity, "image path not find, path:" + bigPng, Toast.LENGTH_LONG).show();
return;
}
WXImageObject imgObj = new WXImageObject(bmpBig);
WXMediaMessage msg = new WXMediaMessage();
msg.mediaObject = imgObj;
msg.thumbData = Util.bmpToByteArray(bmpSmall, true); // 设置缩略图
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction("img");
req.message = msg;
//聊天
if(mode == 0){
req.scene = SendMessageToWX.Req.WXSceneSession;
}
//朋友圈
else if((mode == 1) && (checkCanSendToFriend(api)))
{
req.scene = SendMessageToWX.Req.WXSceneTimeline;
}
else{
req.scene = SendMessageToWX.Req.WXSceneSession;
}
api.sendReq(req);
myLog("send img ok");
}
public static void sendURLWithAPI(IWXAPI api, AppActivity activity, String png, String title, String
desc, String url, int mode)
{
Bitmap bmp = BitmapFactory.decodeFile(png);
if(bmp == null){
Toast.makeText(activity, "image path not find, path:" + png, Toast.LENGTH_LONG).show();
return;
}
WXWebpageObject webpage = new WXWebpageObject();
webpage.webpageUrl = url;
WXMediaMessage msg = new WXMediaMessage(webpage);
msg.title = title;
msg.description = desc;
Bitmap thumb = bmp;
msg.thumbData = Util.bmpToByteArray(thumb, true);
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction("webpage");
req.message = msg;
//聊天
if(mode == 0){
req.scene = SendMessageToWX.Req.WXSceneSession;
}
//朋友圈
else if((mode == 1) && (checkCanSendToFriend(api)))
{
req.scene = SendMessageToWX.Req.WXSceneTimeline;
}
else{
req.scene = SendMessageToWX.Req.WXSceneSession;
}
api.sendReq(req);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
Log.i("wc", "onNewIntent");
// setIntent(intent);
// api.handleIntent(intent, this);
}
// 微信发送请求到第三方应用时,会回调到该方法
@Override
public void onReq(BaseReq req) {
Log.i("wc", "onReq");
switch (req.getType()) {
case ConstantsAPI.COMMAND_GETMESSAGE_FROM_WX:
//goToGetMsg();
break;
case ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX:
//goToShowMsg((ShowMessageFromWX.Req) req);
break;
default:
break;
}
}
// 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法
@Override
public void onResp(BaseResp resp) {
Log.i("wc", "onResp");
Log.i("wc", String.format("%d", resp.errCode));
switch (resp.errCode) {
case BaseResp.ErrCode.ERR_OK:
break;
case BaseResp.ErrCode.ERR_USER_CANCEL:
break;
case BaseResp.ErrCode.ERR_AUTH_DENIED:
break;
default:
break;
}
if(resp.errCode == BaseResp.ErrCode.ERR_OK)
{
backToAppActivityWithSuccess(true);
}
else
{
backToAppActivityWithSuccess(false);
}
}
private void backToAppActivityWithSuccess(boolean success){
if(success){
AppActivity.nativeSendMessage("addevent;104");
}else{
AppActivity.nativeSendMessage("addevent;105");
}
Intent intent = new Intent();
intent.setClass(WXEntryActivity.this, AppActivity.class);
startActivity(intent);
finish();
((WXEntryActivity) WXEntryActivity.this).overridePendingTransition(0, 0);
}
private static boolean checkCanSendToFriend(IWXAPI api){
int wxSdkVersion = api.getWXAppSupportAPI();
if (wxSdkVersion >= TIMELINE_SUPPORTED_VERSION) {
return true;
} else {
return false;
}
}
}
2. 用法代码
private static IWXAPI api = null;
private void sendWeixinImage(int mode, String smallPng, String bigPng){
if(api == null)
{
api = WXAPIFactory.createWXAPI(this, WXEntryActivity.APP_ID);
api.registerApp(WXEntryActivity.APP_ID);
}
WXEntryActivity.sendImageWithAPI(api, this, mode, smallPng, bigPng);
}
private void sendWeixinURL(String png, String title, String desc, String url, int mode){
if(api == null)
{
api = WXAPIFactory.createWXAPI(this, WXEntryActivity.APP_ID);
api.registerApp(WXEntryActivity.APP_ID);
}
WXEntryActivity.sendURLWithAPI(api, this, png, title, desc, url, mode);
}
1.WXEntryActivity.java
package com.mz.maoxian.lenovo.wxapi;
import java.io.IOException;
import java.io.InputStream;
import org.cocos2dx.lua.AppActivity;
import com.tencent.mm.sdk.openapi.BaseReq;
import com.tencent.mm.sdk.openapi.BaseResp;
import com.tencent.mm.sdk.openapi.ConstantsAPI;
import com.tencent.mm.sdk.openapi.SendMessageToWX;
import com.tencent.mm.sdk.openapi.IWXAPI;
import com.tencent.mm.sdk.openapi.IWXAPIEventHandler;
import com.tencent.mm.sdk.openapi.WXAPIFactory;
import com.tencent.mm.sdk.openapi.WXImageObject;
import com.tencent.mm.sdk.openapi.WXMediaMessage;
import com.tencent.mm.sdk.openapi.WXTextObject;
import com.tencent.mm.sdk.openapi.WXWebpageObject;
import android.app.Activity;
import android.content.Intent;
import android.content.res.AssetManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
private static final int TIMELINE_SUPPORTED_VERSION = 0x21020001;
public static final String APP_ID = "wxc8a10e8a59add48b";
// IWXAPI 是第三方app和微信通信的openapi接口
private static IWXAPI api;
public static void myLog(String str)
{
Log.i("wc", str);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
myLog("onCreate in Weixin entry");
this.initWX();
}
private static String buildTransaction(final String type) {
return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis();
}
public void initWX(){
// 通过WXAPIFactory工厂,获取IWXAPI的实例
api = WXAPIFactory.createWXAPI(this, APP_ID, false);
api.registerApp(APP_ID);
api.handleIntent(getIntent(), this);
}
// private static Bitmap getImageFromAssetsFile(AppActivity activity, String fileName)
// {
// Bitmap image = null;
// AssetManager am = activity.getResources().getAssets();
// try
// {
// InputStream is = am.open(fileName);
// image = BitmapFactory.decodeStream(is);
// is.close();
// }
// catch (IOException e)
// {
// Log.i("wc", "getImageFromAssetsFile error");
// e.printStackTrace();
// }
//
// return image;
//
// }
public static void sendImageWithAPI(IWXAPI api, AppActivity activity, int mode, String smallPng, String bigPng){
Log.i("wc", "smallPng:" + smallPng + " bigPng:" + bigPng);
Bitmap bmpSmall = BitmapFactory.decodeFile(smallPng);
Bitmap bmpBig = BitmapFactory.decodeFile(bigPng);
if(bmpSmall == null){
myLog("bmp is null");
Toast.makeText(activity, "image path not find, path:" + smallPng, Toast.LENGTH_LONG).show();
return;
}
if(bmpBig == null){
myLog("bmp is null");
Toast.makeText(activity, "image path not find, path:" + bigPng, Toast.LENGTH_LONG).show();
return;
}
WXImageObject imgObj = new WXImageObject(bmpBig);
WXMediaMessage msg = new WXMediaMessage();
msg.mediaObject = imgObj;
msg.thumbData = Util.bmpToByteArray(bmpSmall, true); // 设置缩略图
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction("img");
req.message = msg;
//聊天
if(mode == 0){
req.scene = SendMessageToWX.Req.WXSceneSession;
}
//朋友圈
else if((mode == 1) && (checkCanSendToFriend(api)))
{
req.scene = SendMessageToWX.Req.WXSceneTimeline;
}
else{
req.scene = SendMessageToWX.Req.WXSceneSession;
}
api.sendReq(req);
myLog("send img ok");
}
public static void sendURLWithAPI(IWXAPI api, AppActivity activity, String png, String title, String
desc, String url, int mode)
{
Bitmap bmp = BitmapFactory.decodeFile(png);
if(bmp == null){
Toast.makeText(activity, "image path not find, path:" + png, Toast.LENGTH_LONG).show();
return;
}
WXWebpageObject webpage = new WXWebpageObject();
webpage.webpageUrl = url;
WXMediaMessage msg = new WXMediaMessage(webpage);
msg.title = title;
msg.description = desc;
Bitmap thumb = bmp;
msg.thumbData = Util.bmpToByteArray(thumb, true);
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction("webpage");
req.message = msg;
//聊天
if(mode == 0){
req.scene = SendMessageToWX.Req.WXSceneSession;
}
//朋友圈
else if((mode == 1) && (checkCanSendToFriend(api)))
{
req.scene = SendMessageToWX.Req.WXSceneTimeline;
}
else{
req.scene = SendMessageToWX.Req.WXSceneSession;
}
api.sendReq(req);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
Log.i("wc", "onNewIntent");
// setIntent(intent);
// api.handleIntent(intent, this);
}
// 微信发送请求到第三方应用时,会回调到该方法
@Override
public void onReq(BaseReq req) {
Log.i("wc", "onReq");
switch (req.getType()) {
case ConstantsAPI.COMMAND_GETMESSAGE_FROM_WX:
//goToGetMsg();
break;
case ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX:
//goToShowMsg((ShowMessageFromWX.Req) req);
break;
default:
break;
}
}
// 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法
@Override
public void onResp(BaseResp resp) {
Log.i("wc", "onResp");
Log.i("wc", String.format("%d", resp.errCode));
switch (resp.errCode) {
case BaseResp.ErrCode.ERR_OK:
break;
case BaseResp.ErrCode.ERR_USER_CANCEL:
break;
case BaseResp.ErrCode.ERR_AUTH_DENIED:
break;
default:
break;
}
if(resp.errCode == BaseResp.ErrCode.ERR_OK)
{
backToAppActivityWithSuccess(true);
}
else
{
backToAppActivityWithSuccess(false);
}
}
private void backToAppActivityWithSuccess(boolean success){
if(success){
AppActivity.nativeSendMessage("addevent;104");
}else{
AppActivity.nativeSendMessage("addevent;105");
}
Intent intent = new Intent();
intent.setClass(WXEntryActivity.this, AppActivity.class);
startActivity(intent);
finish();
((WXEntryActivity) WXEntryActivity.this).overridePendingTransition(0, 0);
}
private static boolean checkCanSendToFriend(IWXAPI api){
int wxSdkVersion = api.getWXAppSupportAPI();
if (wxSdkVersion >= TIMELINE_SUPPORTED_VERSION) {
return true;
} else {
return false;
}
}
}
2. 用法代码
private static IWXAPI api = null;
private void sendWeixinImage(int mode, String smallPng, String bigPng){
if(api == null)
{
api = WXAPIFactory.createWXAPI(this, WXEntryActivity.APP_ID);
api.registerApp(WXEntryActivity.APP_ID);
}
WXEntryActivity.sendImageWithAPI(api, this, mode, smallPng, bigPng);
}
private void sendWeixinURL(String png, String title, String desc, String url, int mode){
if(api == null)
{
api = WXAPIFactory.createWXAPI(this, WXEntryActivity.APP_ID);
api.registerApp(WXEntryActivity.APP_ID);
}
WXEntryActivity.sendURLWithAPI(api, this, png, title, desc, url, mode);
}
相关文章推荐
- 社交巨头三国杀:微信、WhatsApp、Line到底有啥区别?
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置