Android分享字符串到微信,Android实现微信分享及注意事项

一、获取帮助文档并下载相关资料

首先打开微信开放平台:https://open.weixin.qq.com/ 如果没有注册,请先注册并上传开发者资料等待审核。

资源中心----移动应用开发----分享与收藏功能----Android开发手册

开发手册链接地址:https://open.weixin.qq.com/zh_CN/htmledition/res/dev/document/sdk/android/index.html

资源中心----移动应用开发----接入指南---Android接入指南(下面我们主要参考这个)

二、接入微信分享功能

1、申请AppID

如何现在没有AppID可以先下载官方的Demo使用Demo中的AppID即可。

SDK和Demo下载地址:https://open.weixin.qq.com/cgi-bin/frame?t=resource/res_main_tmpl&verify=1&lang=zh_CN&target=res/app_download_android

使用微信分享、登录、收藏、支付等功能需要的库以及文件。点击下载 Android开发工具包

使用微信语音识别接口、语音合成接口。点击下载 语音SDK+Demo+开发文档

使用微信图像识别接口。点击下载 图像SDK+Demo+开发文档

使用微信卡券功能接口。点击下载 卡券SDK+开发文档

包含了一个完整的范例工程。该范例的使用可以参阅Android平台上手指南:HelloWeixin@Android。

点击下载

用于获取安装到手机的第三方应用签名的apk包。点击下载

签名生成工具下载完成后我们可以参考一下Demo来集成。

2、下载微信开发工具包(在上面已经下载)

3、开始搭建开发环境然后将libammsdk.jar文件拷贝到工程lib目录下。

注意:如果使用的是Demo中的AppID则包名一定要先和Demo的包名一致,否则分享会出错。

1db079c3c3eb4f4354ea301d8687f432.png

4、新建一个Activity在里面放置一个按钮

package net.sourceforge.simcpux;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import com.example.weixinsharedemo.share.WeixinShareManager;

public class MainActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

Button button = (Button) findViewById(R.id.share_weibo);

button.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

WeixinShareManager wsm = WeixinShareManager.getInstance(MainActivity.this);

wsm.shareByWeixin(wsm.new ShareContentPic(R.drawable.ic_launcher),

WeixinShareManager.WEIXIN_SHARE_TYPE_TALK);

}

});

}

}

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:paddingBottom="@dimen/activity_vertical_margin"

android:paddingLeft="@dimen/activity_horizontal_margin"

android:paddingRight="@dimen/activity_horizontal_margin"

android:paddingTop="@dimen/activity_vertical_margin"

tools:context=".MainActivity" >

android:id="@+id/share_weibo"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="分享到微信"/>

4、开始创建我们的分享逻辑类并实现需要的分享功能

package com.example.weixinsharedemo.share;

import android.content.Context;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.widget.Toast;

import com.example.weixinsharedemo.util.WeixiShareUtil;

import com.tencent.mm.sdk.modelmsg.SendMessageToWX;

import com.tencent.mm.sdk.modelmsg.WXImageObject;

import com.tencent.mm.sdk.modelmsg.WXMediaMessage;

import com.tencent.mm.sdk.modelmsg.WXTextObject;

import com.tencent.mm.sdk.modelmsg.WXWebpageObject;

import com.tencent.mm.sdk.openapi.IWXAPI;

import com.tencent.mm.sdk.openapi.WXAPIFactory;

/**

* 实现微信分享功能的核心类

* @author Administrator

*

*/

public class WeixinShareManager{

private static final int THUMB_SIZE = 150;

/**

* 文字

*/

public static final int WEIXIN_SHARE_WAY_TEXT = 1;

/**

* 图片

*/

public static final int WEIXIN_SHARE_WAY_PIC = 2;

/**

* 链接

*/

public static final int WEIXIN_SHARE_WAY_WEBPAGE = 3;

/**

* 会话

*/

public static final int WEIXIN_SHARE_TYPE_TALK = SendMessageToWX.Req.WXSceneSession;

/**

* 朋友圈

*/

public static final int WEIXIN_SHARE_TYPE_FRENDS = SendMessageToWX.Req.WXSceneTimeline;

private static WeixinShareManager instance;

private static String weixinAppId;

private IWXAPI wxApi;

private Context context;

private WeixinShareManager(Context context){

this.context = context;

//初始化数据

weixinAppId = WeixiShareUtil.getWeixinAppId(context);

//初始化微信分享代码

if(weixinAppId != null){

initWeixinShare(context);

}

}

/**

* 获取WeixinShareManager实例

* 非线程安全,请在UI线程中操作

* @return

*/

public static WeixinShareManager getInstance(Context context){

if(instance == null){

instance = new WeixinShareManager(context);

}

return instance;

}

private void initWeixinShare(Context context){

wxApi = WXAPIFactory.createWXAPI(context, weixinAppId, true);

wxApi.registerApp(weixinAppId);

}

/**

* 通过微信分享

* @param shareWay 分享的方式(文本、图片、链接)

* @param shareType 分享的类型(朋友圈,会话)

*/

public void shareByWeixin(ShareContent shareContent, int shareType){

switch (shareContent.getShareWay()) {

case WEIXIN_SHARE_WAY_TEXT:

shareText(shareType, shareContent);

break;

case WEIXIN_SHARE_WAY_PIC:

sharePicture(shareType, shareContent);

break;

case WEIXIN_SHARE_WAY_WEBPAGE:

shareWebPage(shareType, shareContent);

break;

}

}

private abstract class ShareContent{

protected abstract int getShareWay();

protected abstract String getContent();

protected abstract String getTitle();

protected abstract String getURL();

protected abstract int getPicResource();

}

/**

* 设置分享文字的内容

* @author Administrator

*

*/

public class ShareContentText extends ShareContent{

private String content;

/**

* 构造分享文字类

* @param text 分享的文字内容

*/

public ShareContentText(String content){

this.content = content;

}

@Override

protected String getContent() {

return content;

}

@Override

protected String getTitle() {

return null;

}

@Override

protected String getURL() {

return null;

}

@Override

protected int getPicResource() {

return -1;

}

@Override

protected int getShareWay() {

return WEIXIN_SHARE_WAY_TEXT;

}

}

/**

* 设置分享图片的内容

* @author Administrator

*

*/

public class ShareContentPic extends ShareContent{

private int picResource;

public ShareContentPic(int picResource){

this.picResource = picResource;

}

@Override

protected String getContent() {

return null;

}

@Override

protected String getTitle() {

return null;

}

@Override

protected String getURL() {

return null;

}

@Override

protected int getPicResource() {

return picResource;

}

@Override

protected int getShareWay() {

return WEIXIN_SHARE_WAY_PIC;

}

}

/**

* 设置分享链接的内容

* @author Administrator

*

*/

public class ShareContentWebpage extends ShareContent{

private String title;

private String content;

private String url;

private int picResource;

public ShareContentWebpage(String title, String content,

String url, int picResource){

this.title = title;

this.content = content;

this.url = url;

this.picResource = picResource;

}

@Override

protected String getContent() {

return content;

}

@Override

protected String getTitle() {

return title;

}

@Override

protected String getURL() {

return url;

}

@Override

protected int getPicResource() {

return picResource;

}

@Override

protected int getShareWay() {

return WEIXIN_SHARE_WAY_WEBPAGE;

}

}

/*

* 分享文字

*/

private void shareText(int shareType, ShareContent shareContent) {

String text = shareContent.getContent();

//初始化一个WXTextObject对象

WXTextObject textObj = new WXTextObject();

textObj.text = text;

//用WXTextObject对象初始化一个WXMediaMessage对象

WXMediaMessage msg = new WXMediaMessage();

msg.mediaObject = textObj;

msg.description = text;

//构造一个Req

SendMessageToWX.Req req = new SendMessageToWX.Req();

//transaction字段用于唯一标识一个请求

req.transaction = buildTransaction("textshare");

req.message = msg;

//发送的目标场景, 可以选择发送到会话 WXSceneSession 或者朋友圈 WXSceneTimeline。 默认发送到会话。

req.scene = shareType;

wxApi.sendReq(req);

}

/*

* 分享图片

*/

private void sharePicture(int shareType, ShareContent shareContent) {

Bitmap bmp = BitmapFactory.decodeResource(context.getResources(), shareContent.getPicResource());

WXImageObject imgObj = new WXImageObject(bmp);

WXMediaMessage msg = new WXMediaMessage();

msg.mediaObject = imgObj;

Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, THUMB_SIZE, THUMB_SIZE, true);

bmp.recycle();

msg.thumbData = WeixiShareUtil.bmpToByteArray(thumbBmp, true); //设置缩略图

SendMessageToWX.Req req = new SendMessageToWX.Req();

req.transaction = buildTransaction("imgshareappdata");

req.message = msg;

req.scene = shareType;

wxApi.sendReq(req);

}

/*

* 分享链接

*/

private void shareWebPage(int shareType, ShareContent shareContent) {

WXWebpageObject webpage = new WXWebpageObject();

webpage.webpageUrl = shareContent.getURL();

WXMediaMessage msg = new WXMediaMessage(webpage);

msg.title = shareContent.getTitle();

msg.description = shareContent.getContent();

Bitmap thumb = BitmapFactory.decodeResource(context.getResources(), shareContent.getPicResource());

if(thumb == null){

Toast.makeText(context, "图片不能为空", Toast.LENGTH_SHORT).show();

}else{

msg.thumbData = WeixiShareUtil.bmpToByteArray(thumb, true);

}

SendMessageToWX.Req req = new SendMessageToWX.Req();

req.transaction = buildTransaction("webpage");

req.message = msg;

req.scene = shareType;

wxApi.sendReq(req);

}

private String buildTransaction(final String type) {

return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis();

}

}上面只是实现了文字、图片、链接的分享功能,如需分享视频、音频可以添加。

5、实现分享结果反馈

要实现分享结果的反馈,微信已经将结果的处理封装到了WXEntryActivity中(jar包中),所以我们要继承该类获取反馈结果。

在你的包名相应目录下新建一个wxapi目录,并在该wxapi目录下新增一个WXEntryActivity类,该类继承自Activity(例如应用程序的包名为net.sourceforge.simcpux,则新添加的类如下图所示)

package net.sourceforge.simcpux.wxapi;

import com.example.weixinsharedemo.share.WXCallbackActivity;

public class CallBackActivity extends WXCallbackActivity{

@Override

public void weixinResp(int respCode) {

System.out.println("respCode = " + respCode);

}

}

注意:记得去Mainfest文件中注册Activity

package="net.sourceforge.simcpux"

android:versionCode="1"

android:versionName="1.0" >

android:minSdkVersion="8"

android:targetSdkVersion="18" />

android:allowBackup="true"

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@style/AppTheme" >

android:name="net.sourceforge.simcpux.MainActivity"

android:label="@string/app_name" >

android:name="net.sourceforge.simcpux.wxapi.CallBackActivity"

android:label="@string/app_name"

android:exported="true">

三、运行代码使用Demo中AppId的朋友在这里要注意,请设置一下签名文件(在上面下载的SDK中有)如下:

83f5fa2df344cf64009e123269e324bf.png

点击Browser进行选择,运行即可。

如果有什么问题请在下面留言,也可以加博客旁边的QQ群(142979499)进行详细交流。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现Web分享微信的核心是生成带有微信分享参数的URL,然后将该URL分享微信即可。以下是一个生成微信分享链接的Java示例代码: ```java import java.io.UnsupportedEncodingException; import java.net.URLEncoder; public class WechatShareUtil { private static final String CHARSET = "UTF-8"; private static final String WECHAT_APP_ID = "YOUR_WECHAT_APP_ID"; private static final String WECHAT_APP_SECRET = "YOUR_WECHAT_APP_SECRET"; /** * 生成微信分享链接 * @param url 分享的网址 * @param title 分享的标题 * @param description 分享的描述 * @param imageUrl 分享的图片链接 * @return 微信分享链接 */ public static String generateWechatShareLink(String url, String title, String description, String imageUrl) { String encodedUrl = encodeUrl(url); String encodedTitle = encodeUrl(title); String encodedDescription = encodeUrl(description); String encodedImageUrl = encodeUrl(imageUrl); String timestamp = Long.toString(System.currentTimeMillis() / 1000); String nonceStr = Long.toString(System.currentTimeMillis()); String signature = WechatSignatureUtil.generateSignature(encodedUrl, nonceStr, timestamp, WECHAT_APP_ID, WECHAT_APP_SECRET); StringBuilder sb = new StringBuilder(); sb.append("http://mp.weixin.qq.com/s?"); sb.append("timestamp=").append(timestamp).append("&"); sb.append("nonce=").append(nonceStr).append("&"); sb.append("signature=").append(signature).append("&"); sb.append("url=").append(encodedUrl).append("&"); sb.append("title=").append(encodedTitle).append("&"); sb.append("description=").append(encodedDescription).append("&"); sb.append("picurl=").append(encodedImageUrl); return sb.toString(); } /** * URL编码 * @param value 待编码的字符串 * @return 编码后的字符串 */ private static String encodeUrl(String value) { try { return URLEncoder.encode(value, CHARSET); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } } } ``` 这段代码中,我们使用了一个WechatSignatureUtil类来生成微信签名,该类的实现可以参考微信公众号开发文档中的示例代码。需要注意的是,由于微信的安全机制,生成签名的过程需要使用到你的微信公众号的AppID和AppSecret,因此你需要先在微信公众平台上注册并获得这两个值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值