您的位置:首页 > 移动开发 > 微信开发

Android平台的微信分享

2015-12-01 17:41 302 查看
现在微信分享已经是一个app必备的功能,在这里简单的介绍一下最基本的微信分享的功能。

主要流程:

1,在微信开发平台注册账号,这与微信账号不同,微信开放平台

2,在微信开放平台创建你的应用app

3,导入微信sdk

4,启动微信

5,分享文本到好友或朋友圈

6,分享图片到好友或朋友圈

7,分享音频到好友或朋友圈

8,分享视频到好友或朋友圈

9,分享url到好友或朋友圈

10,分享表情到好友或朋友圈

2,在微信开放平台创建你的应用app,建议现在你的IDE中创建你的项目,然后在根据你的项目在开放平台上创建

响应的应用。注意包名必须与你的IDE中项目包名一致,应用签名必须使用开放平台资源下载-签名生成工具生成的签名。



3,导入微信sdk,即将libammsdk.jar考入libs文件中。右击jar-build path - configure build path...

然后在AndroidManifest.xml中添加响应的权限,移动应用接入指南

4,启动微信:

要调用微信sdk中的api,必须先初始化(在以后的api调用中,都默认已经初始化)

private IWXAPI mIWXAPI = null;//定义成员变量
public static final String AppId = "wx94697bac0300039f";//在开放平台创建项目时,获得appId。
初始化:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_testweixin);
initViews();
mContext = this;
mIWXAPI = WXAPIFactory.createWXAPI(mContext, AppId,true);
mIWXAPI.registerApp(AppId);
registerListener();
}


启动微信的api调用:

Toast.makeText(mContext, ""+mIWXAPI.openWXApp(), Toast.LENGTH_LONG).show();//顺便Tosat了返回的结果。


5,分享文本到好友或朋友圈

/**
* 发送消息到微信
*
*/
private void shareTextToWX() {
String text = et_share_content.getText().toString();
WXTextObject textObj = new WXTextObject();
textObj.text = text;
WXMediaMessage mediaMsg = new WXMediaMessage();
mediaMsg.mediaObject = textObj;
mediaMsg.description = text;
// 创建一个请求的对象
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.message = mediaMsg;
// 唯一标示
req.transaction = System.currentTimeMillis() + "text";
// 标示发送给朋友或朋友圈
if (tg.isChecked()) {
req.scene = SendMessageToWX.Req.WXSceneSession;
} else {
req.scene = SendMessageToWX.Req.WXSceneTimeline;
}
mIWXAPI.sendReq(req);
}


6,分享图片到好友或朋友圈

6.1,二进制图片

/**
* 分享二进制
*/
private void shareImageToWxWidthBinary() {
Options options = new Options();
options.inSampleSize = 3;
// 第一步,获取bitmap对象
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.shamo, options);
// 第二步,创建Wx。。。Object对象,并包装bitmap
WXImageObject wxObj = new WXImageObject(bitmap);// 设置原图
// 第三步,创建WxMediaMessage对象,并包装object对象
WXMediaMessage wxMsg = new WXMediaMessage();
wxMsg.mediaObject = wxObj;
// 压缩图像
Bitmap thumBitmap = Bitmap.createScaledBitmap(bitmap, 120, 150, true);
bitmap.recycle();// 释放资源

wxMsg.thumbData = bmpToByteArray(thumBitmap, true, 10);// 缩率图大小不能超过32k

// 第四步,创建一个请求对象
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildUniqueTransaction("img");
req.message = wxMsg;
// 第六步,设置分享的对象
if (tg.isChecked()) {
req.scene = SendMessageToWX.Req.WXSceneSession;
} else {
req.scene = SendMessageToWX.Req.WXSceneTimeline;
}
Toast.makeText(this, mIWXAPI.sendReq(req) + "", Toast.LENGTH_LONG).show();
Log.i(tag, "分享成功");
}


6.2,分享本地图片

/**
* 分享本地
*/
private void shareImageToWXFromLocal() {
File parent = Environment.getExternalStorageDirectory();
File file = new File(parent, "shamo.jpg");
if (!file.exists()) {
Toast.makeText(this, "文件不存在", Toast.LENGTH_LONG).show();
return;
}
// 第一步,创建Wx。。。Object对象,并包装bitmap
WXImageObject wxObj = new WXImageObject();// 设置原图
wxObj.imagePath = file.getAbsolutePath();
// 第二步,创建WxMediaMessage对象,并包装object对象
WXMediaMessage wxMsg = new WXMediaMessage();
wxMsg.mediaObject = wxObj;

Options options = new Options();
options.inSampleSize = 6;
// 第三步,获取bitmap对象
Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath(), options);
// 压缩图像
Bitmap thumBitmap = Bitmap.createScaledBitmap(bitmap, 120, 150, true);
bitmap.recycle();// 释放资源
wxMsg.thumbData = bmpToByteArray(thumBitmap, true, 10);// 缩率图大小不能超过32k
// 第四步,创建一个请求对象
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildUniqueTransaction("img");
req.message = wxMsg;
// 第六步,设置分享的对象
if (tg.isChecked()) {
req.scene = SendMessageToWX.Req.WXSceneSession;
} else {
req.scene = SendMessageToWX.Req.WXSceneTimeline;
}
Toast.makeText(this, mIWXAPI.sendReq(req) + "", Toast.LENGTH_LONG).show();
Log.i(tag, "分享成功");
}


6.3,分享网络图片

/**
* 发送图片url
*/
private void shareImageToWXWidthUrl() {
new Thread() {
@Override
public void run() {
String url = "http://g.hiphotos.baidu.com/image/pic/item/960a304e251f95ca2f34115acd177f3e6609521d.jpg";
// 第一步,创建Wx。。。Object对象,并包装bitmap
WXImageObject wxObj = new WXImageObject();// 设置原图
wxObj.imageUrl = url;
// 第二步,创建WxMediaMessage对象,并包装object对象
WXMediaMessage wxMsg = new WXMediaMessage();
wxMsg.mediaObject = wxObj;

Options options = new Options();
options.inSampleSize = 6;
// 第三步,获取bitmap对象
Bitmap bitmap = null;
try {
bitmap = BitmapFactory.decodeStream(new URL(url).openStream());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 压缩图像
Bitmap thumBitmap = Bitmap.createScaledBitmap(bitmap, 120, 150, true);
bitmap.recycle();// 释放资源

wxMsg.thumbData = bmpToByteArray(thumBitmap, true, 10);// 缩率图大小不能超过32k
// 第四步,创建一个请求对象
final SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildUniqueTransaction("img");
req.message = wxMsg;
// 第六步,设置分享的对象
if (tg.isChecked()) {
req.scene = SendMessageToWX.Req.WXSceneSession;
} else {
req.scene = SendMessageToWX.Req.WXSceneTimeline;
}
mHandler.post(new Runnable() {

@Override
public void run() {
Toast.makeText(mContext, mIWXAPI.sendReq(req) + "", Toast.LENGTH_LONG)
.show();
}
});
Log.i(tag, "分享成功");

}
}.start();
}


7,分享音频到好友或朋友圈

/**
* 分url音频
*/
private void shareAudioToWX() {
// 第一步创建封装的obj
WXMusicObject musicObj = new WXMusicObject();
musicObj.musicUrl = "http://music.baidu.com/song/999104?pst=sug";

// 创建MediaMessage
WXMediaMessage wxMsg = new WXMediaMessage();
wxMsg.mediaObject = musicObj;
wxMsg.title = "向天再借五百年";
wxMsg.description = "演唱者:韩磊";

// 创建缩略图
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.music);
Bitmap thumBitmap = Bitmap.createScaledBitmap(bitmap, 120, 150, true);
bitmap.recycle();// 释放资源
wxMsg.thumbData = bmpToByteArray(thumBitmap, true, 100);

// 创建请求对象
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildUniqueTransaction("audio");
req.message = wxMsg;
if (tg.isChecked()) {// 分享的对象
req.scene = SendMessageToWX.Req.WXSceneSession;
} else {
req.scene = SendMessageToWX.Req.WXSceneTimeline;
}
// 分享
Toast.makeText(mContext, mIWXAPI.sendReq(req) + "", Toast.LENGTH_LONG).show();

}


8,分享视频到好友或朋友圈

/**
* 分享视频
*/
private void shareVideoToWx() {
//创建Obj
WXVideoObject video = new WXVideoObject();
video.videoUrl = "http://v.youku.com/v_show/id_XMTM5NjM0NDgyNA==.html?from=y1.7-2";

//
WXMediaMessage wxMsg = new WXMediaMessage();
wxMsg.mediaObject = video;
wxMsg.title = "午夜花火";
wxMsg.description = "锦尚天舞";

//创建缩略图
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.video);
Bitmap thumBitmap = Bitmap.createScaledBitmap(bitmap, 120, 150, true);
bitmap.recycle();// 释放资源
wxMsg.thumbData = bmpToByteArray(thumBitmap, true, 100);

//创建请求对象
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildUniqueTransaction("video");
req.message = wxMsg;
if (tg.isChecked()) {// 分享的对象
req.scene = SendMessageToWX.Req.WXSceneSession;
} else {
req.scene = SendMessageToWX.Req.WXSceneTimeline;
}
// 分享
Toast.makeText(mContext, mIWXAPI.sendReq(req) + "", Toast.LENGTH_LONG).show();
}


9,分享url 到好友或朋友圈

/**
* 分享网页
*/
private void sharePageToWX() {
// 第一步创建WebPage对象
WXWebpageObject webPage = new WXWebpageObject();
webPage.webpageUrl = "http://www.imooc.com/course/list";

// 创建MediaMessage
WXMediaMessage wxMsg = new WXMediaMessage();
wxMsg.mediaObject = webPage;
wxMsg.title = "慕课网";
wxMsg.description = "在线IT教学网站";

// 创建缩略图
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.muke);
Bitmap thumBitmap = Bitmap.createScaledBitmap(bitmap, 120, 150, true);
bitmap.recycle();// 释放资源
wxMsg.thumbData = bmpToByteArray(thumBitmap, true, 100);

// 创建请求对象
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildUniqueTransaction("video");
req.message = wxMsg;
if (tg.isChecked()) {// 分享的对象
req.scene = SendMessageToWX.Req.WXSceneSession;
} else {
req.scene = SendMessageToWX.Req.WXSceneTimeline;
}
Toast.makeText(mContext, mIWXAPI.sendReq(req) + "", Toast.LENGTH_LONG).show();
}


10,分享表情到好友或朋友圈

/**
* 分享表情
*/
private void shareFaceToWX(){
File parent = Environment.getExternalStorageDirectory();
File file = new File(parent,"face.gif");
//第一步,创建一个封装表情的对象
WXEmojiObject emoji = new WXEmojiObject();
emoji.emojiPath = file.getAbsolutePath();

// 创建MediaMessage
WXMediaMessage wxMsg = new WXMediaMessage();
wxMsg.mediaObject = emoji;
wxMsg.title = "表情标题";
wxMsg.description = "表情描述";

// 创建缩略图
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.face);
Bitmap thumBitmap = Bitmap.createScaledBitmap(bitmap, 120, 150, true);
bitmap.recycle();// 释放资源
wxMsg.thumbData = bmpToByteArray(thumBitmap, true, 100);

// 创建请求对象
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildUniqueTransaction("face");
req.message = wxMsg;
if (tg.isChecked()) {// 分享的对象
req.scene = SendMessageToWX.Req.WXSceneSession;
} else {
req.scene = SendMessageToWX.Req.WXSceneTimeline;
}
Toast.makeText(mContext, mIWXAPI.sendReq(req) + "", Toast.LENGTH_LONG).show();

}


其他辅助代码
/**
* 将Bitmap转化成一个二进制的数组
*
* @param bitmap
* @return
* @throws IOException
*/
private byte[] bmpToByteArray(Bitmap bitmap, boolean needRecyle, int scale) {
byte[] byteArray = null;
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
bitmap.compress(CompressFormat.PNG, scale, bos);
byteArray = bos.toByteArray();
if (needRecyle) {
bitmap.recycle();
}
bos.close();
} catch (Exception e) {
e.printStackTrace();
}
return byteArray;
}

/**
* 创建唯一标示
*
* @return
*/
private String buildUniqueTransaction(String str) {
String uniqueTransaction = String.valueOf(System.currentTimeMillis()) + str;
return uniqueTransaction;
}


特别注意,在设置缩略图,缩略图有严格的要求:大小不能超过32k,高宽也有要求,另外限制的还有title、description等参数的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: