使用微信发送图片

本文详细介绍了如何通过微信开放平台进行应用集成、分享功能实现及审核流程,包括申请开发者资格、获取AppID、代码集成、应用签名与审核等关键步骤。

具体参见微信的例子,我这里只是简单讲讲需要的步骤:

  1. 首先需要去开放平台申请用户并通过审核,地址是:http://open.weixin.qq.com/
  2. 成为开发者之后你需要申请一个应用,并且得到一个AppID,这里需要注意的是你需要提交你的包名(Android和iOS都需要),这个AppID需要记录下来供客户端程序使用;
  3. 代码集成;
  4. 完成集成后iOS版的已经可以用了;
  5. Android版本还需要使用应用的正式签名打个apk,安装到手机上,然后去下载一个应用http://open.weixin.qq.com/download/?lang=zh_CN,这个工具安装到手机上,并且输入你的App的包名,然后得到你的应用签名,并且填写到你在你的应用审核的相应的信息页面;
  6. 然后你的应用需要提交审核,大概等3个工作日之后你就可以开始测试了,之前你只能看微信的测试代码,或者像我这样把微信相关的功能封装成一个工具类,然后在微信的测试程序上调试通过后集成到应用中,然后等待微信审核通过,注意这时你是没办法在你的程序中调试你的应用的;
  7. 等到你的应用审核通过,你就可以测试了,但是注意:微信的分享功能会验证三个信息(Android版本):应用包名+签名文件+审核信息,所以一定要等你的应用通过审核之后才能通过签名包完成测试,不能debug!(微信的官方文档说的是不需要等应用审核通过就可以测试,但我这里确实等到审核通过之后才可以)

最好附上测试代码,可以用微信的测试程序中提供的debug.store测试:

import java.net.URL;

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import com.tencent.mm.sdk.openapi.IWXAPI;
import com.tencent.mm.sdk.openapi.SendMessageToWX;
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.platformtools.Util;

@SuppressLint("HandlerLeak")
public class WeChatUtil {
	private static final int MSG_FINISH_DOWNLOAD = 1;
	private String appId = null;
	private Context context = null;
	private IWXAPI api = null;
	private String url = null;

	public WeChatUtil(Context context, String appId) {
		this.context = context;
		this.appId = appId;
	}

	private Handler handler = new Handler() {
		@Override
		public void handleMessage(Message msg) {
			switch (msg.what) {
			case MSG_FINISH_DOWNLOAD:
				try {
					Bitmap bmp = (Bitmap) msg.obj;
					WXImageObject imageObject = new WXImageObject();
					imageObject.imageUrl = url;
					Log.i("===========WX=============", imageObject.imageUrl);

					WXMediaMessage wxmsg = new WXMediaMessage();
					wxmsg.mediaObject = imageObject;

					Bitmap thumbBmp = Bitmap
							.createScaledBitmap(bmp, 150, 150, true);
					if (bmp != null && (!bmp.isRecycled())) {
						bmp.recycle();
					}
					wxmsg.thumbData = Util.bmpToByteArray(thumbBmp, true);

					SendMessageToWX.Req req = new SendMessageToWX.Req();
					req.transaction = buildTransaction("img");
					req.message = wxmsg;
					req.scene = SendMessageToWX.Req.WXSceneSession;

					if (!api.sendReq(req)) {
						throw new Exception("发送请求失败!");
					} else {
						System.out.println("分享图片成功, 地址:" + url);
					}
				} catch (Exception e) {
					e.printStackTrace();
				} finally {
					api.unregisterApp();
				}
				break;
			default:
				super.handleMessage(msg);
				break;
			}
		}
	};

	class WorkingThread extends Thread {
		private String url = null;

		public WorkingThread(String url) {
			this.url = url;
		}

		@Override
		public void run() {
			try {
				Bitmap bmp = BitmapFactory.decodeStream(new URL(url).openStream());
				if (null == bmp) {
					throw new Exception("图片解码失败!");
				}
				// 通知主线程完成更新
				Message msg = WeChatUtil.this.handler
						.obtainMessage(MSG_FINISH_DOWNLOAD);
				msg.obj = bmp;
				WeChatUtil.this.handler.sendMessage(msg);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

	/**
	 * 发送网络图片
	 */
	public void sendHttpImage(String url) {
		this.url = url;
		api = WXAPIFactory.createWXAPI(context, appId);

		try {
			boolean wxInstall = api.isWXAppInstalled();
			if (!wxInstall) {
				throw new Exception("微信未安装!");
			}

			if (!api.registerApp(appId)) {
				throw new Exception("微信API注册失败!");
			}

			WorkingThread t = new WorkingThread(url);
			t.start();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private String buildTransaction(final String type) {
		return (type == null) ? String.valueOf(System.currentTimeMillis())
				: type + System.currentTimeMillis();
	}
	
	/**
	 * 发送文字
	 * @param text
	 */
	public void sendText(String text) {
		api = WXAPIFactory.createWXAPI(context, appId);

		try {
			boolean wxInstall = api.isWXAppInstalled();
			if (!wxInstall) {
				throw new Exception("微信未安装!");
			}

			if (!api.registerApp(appId)) {
				throw new Exception("微信API注册失败!");
			}

			// 初始化一个WXTextObject对象
			WXTextObject textObj = new WXTextObject();
			textObj.text = text;

			// 用WXTextObject对象初始化一个WXMediaMessage对象
			WXMediaMessage msg = new WXMediaMessage();
			msg.mediaObject = textObj;
			// 发送文本类型的消息时,title字段不起作用
			// msg.title = "Will be ignored";
			msg.description = text;

			// 构造一个Req
			SendMessageToWX.Req req = new SendMessageToWX.Req();
			req.transaction = buildTransaction("text"); // transaction字段用于唯一标识一个请求
			req.message = msg;
			req.scene = SendMessageToWX.Req.WXSceneSession;
			
			// 调用api接口发送数据到微信
			if (!api.sendReq(req))
				System.out.println("短消息发送失败!");
			
			api.unregisterApp();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}







评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值