微信分享之andriod开发

说起微信分享我就忍不住吐槽,
第一:你必须先去官网获取它的WX_APP_ID,不然在你开发阶段根本没法测试(当然你可以试着用测试号,我没有用过的。)。
第二,就是关于微信提供的debug.keystore签名,前提你必须去官网获取认证,否则不可能分享成功。
第三,在你的app中添加了太多微信相关的代码,而且放的相关文件问题还必须放在工程根目录下面。
第四,当你获取开发完开始测试时,你必须把你的微信清空一次,不然你也不可能成功的分享连接。

哎,反正他真的没有qq做的公共借口做的好,配置太麻烦了。不吐槽了,进入正题。

一,进入公众平台注册:

https://mp.weixin.qq.com/

二,微信分享资料官网地址

代码示例连接
jar包以及示例下载地址
(建议最好看官网的资料,其它的资料一个不是最新的,第二个也不安全)

三、资料准备好了,开始开发了噢(记得导入jar包哦)

1.在AndroidManifest.xml中添加下面配置

参考官网示例中的相关文件,只要activity相关,把intent-filter过滤给去掉。

      <activity
            android:name=".wxapi.WXEntryActivity"
            android:label="@string/app_name"
            android:exported="true"
            android:launchMode="singleTop">
              <!--<intent-filter>-->
                <!--<action android:name="android.intent.action.MAIN" />-->
                <!--<category android:name="android.intent.category.LAUNCHER" />-->
            <!--</intent-filter>-->

            <!--<intent-filter>-->
                <!--<action android:name="android.intent.action.VIEW"/>-->
                <!--<category android:name="android.intent.category.DEFAULT"/>-->
                <!--<data android:scheme="sdksample"/>-->
            <!--</intent-filter>-->
        </activity>
2.,copy官网中的示例中的wxapi包

copy到你的工程的中,wxapi必须在你的项目的包名下面把红框中的文件copy大自己工程下,我把util也放到wxapi文件中了。

a.修改WXEntryActivity文件

去掉示例中引用的acitivity以及提示,保留注册以及回调信息等。下面是我修改过的wxEntryActivity示例:

public class WXEntryActivity extends Activity implements IWXAPIEventHandler{
    private IWXAPI api;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        api = WXAPIFactory.createWXAPI(this, WX_APP_ID, false);
        api.registerApp(WX_APP_ID);
        api.handleIntent(getIntent(), this);

    }
//
    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);

        setIntent(intent);
        api.handleIntent(intent, this);
    }

    // 微信发送请求到第三方应用时,会回调到该方法
    @Override
    public void onReq(BaseReq req) {
        switch (req.getType()) {
            case ConstantsAPI.COMMAND_GETMESSAGE_FROM_WX:
                break;
            case ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX:
//              goToShowMsg((ShowMessageFromWX.Req) req);
                break;
            default:
                break;
        }
    }

    // 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法
    @Override
    public void onResp(BaseResp resp) {
        int result = 0;
        switch (resp.errCode) {
            case BaseResp.ErrCode.ERR_OK:
                result = R.string.errcode_success;
                finish();
                break;
            case BaseResp.ErrCode.ERR_USER_CANCEL:
                result = R.string.errcode_cancel;
                finish();
                break;
            case BaseResp.ErrCode.ERR_AUTH_DENIED:
                result = R.string.errcode_deny;
                break;
            default:
                result = R.string.errcode_unknown;
                break;
        }
        finish();
        Toast.makeText(this, result, Toast.LENGTH_LONG).show();
    }
b.新建微信WeixinShareManager类,里面官网分享的不同类型的方法总结:

(代码里注意:WeixinShareUtil是微信里的的类,我用的时候改了下名字)。


import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.widget.Toast;

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;

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 = WX_APP_ID;
        //初始化微信分享代码
        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, false);
        wxApi.registerApp(weixinAppId);
    }

    /**
     * 通过微信分享
     *
     * @param shareContent 分享的方式(文本、图片、链接)
     * @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 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) {
        WXImageObject imgObj = new WXImageObject(shareContent.getBitmap());

        WXMediaMessage msg = new WXMediaMessage();
        msg.mediaObject = imgObj;

        Bitmap thumbBmp = Bitmap.createScaledBitmap(shareContent.getBitmap(), THUMB_SIZE, THUMB_SIZE, true);
        shareContent.getBitmap().recycle();
        msg.thumbData = WeixinShareUtil.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()+"&from=weixin";
        WXMediaMessage msg = new WXMediaMessage(webpage);
        msg.title = shareContent.getTitle();
        msg.description = shareContent.getContent();

        if (shareContent.getBitmap() == null) {
            Toast.makeText(context, "图片不能为空", Toast.LENGTH_SHORT).show();
        } else {
            Bitmap thumbBmp = Bitmap.createScaledBitmap(shareContent.getBitmap(), 32, 32, true);
            msg.thumbData = WeixinShareUtil.bmpToByteArray(thumbBmp, 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();
    }
}
c.相关实体类(这里的实体类和前面文章QQ的分享是共同的类。)

1.抽象实体父类

public abstract class ShareContent implements Serializable {
    public abstract int getShareWay();
    public abstract String getContent();
    public abstract String getTitle();
    public abstract String getURL();
    public abstract String getPicResource();
    public abstract Bitmap getBitmap();
    public abstract void setBitmap(Bitmap bitmap);
}

2.继承的分享图片的的实体类

/**
 *  设置分享图片的内容
 * Created by wyh on 2016/8/16.
 */
public class ShareContentPic extends ShareContent {
    private String picResource;
    private Bitmap bitmap;
    public ShareContentPic(String picResource){
        this.picResource = picResource;
    }

    @Override
    public String getContent() {
        return null;
    }

    @Override
    public String getTitle() {
        return null;
    }

    @Override
    public String getURL() {
        return null;
    }

    @Override
    public String getPicResource() {
        return picResource;
    }

    @Override
    public Bitmap getBitmap() {
        return bitmap;
    }

    @Override
    public void setBitmap(Bitmap bitmap) {
        this.bitmap = bitmap;
    }

    @Override
    public int getShareWay() {
        return WeixinShareManager.WEIXIN_SHARE_WAY_PIC;
    }
}

3.分享文本类:

public class ShareContentText extends ShareContent{
    private String content;

    /**
     * 构造分享文字类
     */
    public ShareContentText(String content){
        this.content = content;
    }

    @Override
    public String getContent() {
        return content;
    }

    @Override
    public String getTitle() {
        return null;
    }

    @Override
    public String getURL() {
        return null;
    }

    @Override
    public String getPicResource() {
        return "-1";
    }

    @Override
    public Bitmap getBitmap() {
        return null;
    }

    @Override
    public void setBitmap(Bitmap bitmap) {

    }

    @Override
    public int getShareWay() {
        return WeixinShareManager.WEIXIN_SHARE_WAY_TEXT;
    }

}

4.分享连接相关实体类:

/**
 * 设置分享链接的内容
 * Created by on 2016/8/16.
 */
public class ShareContentWebpage  extends ShareContent {
    private String title;
    private String content;
    private String url;
    private String picResource;
    private Bitmap bitmap;
    public ShareContentWebpage(String title, String content,
                               String url, String picResource){
        this.title = title;
        this.content = content;
        this.url = url;
        this.picResource = picResource;
    }

    @Override
    public String getContent() {
        return content;
    }

    @Override
    public String getTitle() {
        return title;
    }

    @Override
    public String getURL() {
        return url;
    }

    @Override
    public String getPicResource() {
        return picResource;
    }

    @Override
    public Bitmap getBitmap() {
        return bitmap;
    }

    @Override
    public void setBitmap(Bitmap bitmap) {
        this.bitmap = bitmap;
    }

    @Override
    public int getShareWay() {
        return WeixinShareManager.WEIXIN_SHARE_WAY_WEBPAGE;
    }

}
d.使用示例:
/**
*分享给微信好友
*/
 private void showWeixinhaoyou(View view) {
        WeixinShareManager weixinShareManager = getInstance(getActivity());
        if (shareContent.getPicResource()!=null) {
            shareContent.setBitmap(bitmap);
        }
        weixinShareManager.shareByWeixin(shareContent, 0);
    }

三.总结:

大体就这么多了,util类,我就不贴代码了,自己copy官网的示例就好。主要注意配置和引入包的位置就可。上述主要看weixinShareManager就行。我在使用分享仅用了url连接分享。其它接口的没有测试过。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值