实现微信分享步骤 和 功能实现详解

微信分享

一,微信分享步骤详解

1,用命令行或者签名生成工具生成APK签名(个人习惯用命令行 http://www.tttabc.com/android/keytool-keystore-jarsigner-apk.htm);
2,使用生成的APK签名去微信开发者平台 https://open.weixin.qq.com/cgi-bin/index?注册本项目并获取分享的APP_ID, 如何现在没有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
(注意:包名必须一致,图片不能大于32K);
3,下载libammsdk.jar拷贝到lib文件夹下面;

二,代码解析

1.首先在AndroidManifest.xml文件中添加权限

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.weixinsharedemo"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="19" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name="com.example.weixinsharedemo.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.example.weixinsharedemo.wxapi.WXEntryActivity"
            android:exported="true"
            android:label="@string/app_name"
            android:theme="@android:style/Theme.NoTitleBar" >
        </activity>
    </application>

</manifest>

2.MainActivity类

package com.example.weixinsharedemo;


import com.example.weixinsharedemo.wxapi.WXEntryActivity;


import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;


public class MainActivity extends Activity {
    private Button mJump;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mJump = (Button) findViewById(R.id.jump);
        mJump.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, WXEntryActivity.class);
                startActivity(intent);
            }
        });
    }
}

3.Constants类

package com.example.weixinsharedemo;

public class Constants {
    // 内测
    // wx8aa3cecd4ae0bfb1
    // 正式,在微信开发平台申请的APP_ID
    // wx9b33035585ded3b1
    public static final String APP_ID = "wx8aa3cecd4ae0bfb1";
    public static final String APP_WX_ID = "wx6128540a7eb302e8";
}

4.SystemUtil类

package com.example.weixinsharedemo;


import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;

public class SystemUtil {
    private static Activity mActivity = null;
    public SystemUtil(Activity activity) {
        mActivity = activity;
    }
    // /** 微信是否打开*/
    public void openWx(String packageName) {
        PackageManager manager = mActivity.getPackageManager();
        Intent intent = manager.getLaunchIntentForPackage(packageName);
        mActivity.startActivity(intent);
    }
    // /** 是否安装微信*/
    public boolean isInstallWx(String packageName) {
        try {
            PackageManager manager = mActivity.getPackageManager();
            PackageInfo info = manager.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);
            if (info != null) {
                return true;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }
}

5.WXEntryActivity类,类名必须是WXEntryActivity。包名的后缀必须是.wxapi,下面是分享的代码


package com.example.weixinsharedemo.wxapi;


import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
import android.widget.Toast;


import com.example.weixinsharedemo.Constants;
import com.example.weixinsharedemo.R;
import com.example.weixinsharedemo.SystemUtil;
import com.tencent.mm.sdk.openapi.BaseReq;
import com.tencent.mm.sdk.openapi.BaseResp;
import com.tencent.mm.sdk.openapi.IWXAPI;
import com.tencent.mm.sdk.openapi.IWXAPIEventHandler;
import com.tencent.mm.sdk.openapi.SendMessageToWX;
import com.tencent.mm.sdk.openapi.WXAPIFactory;
import com.tencent.mm.sdk.openapi.WXMediaMessage;
import com.tencent.mm.sdk.openapi.WXWebpageObject;
import com.tencent.mm.sdk.platformtools.Util;


public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
    private static final int TIMELINE_SUPPORTED_VERSION = 0x21020001;
    private final String WX_PACKAGE_NAME = "com.tencent.mm";
    private IWXAPI api;
    private TextView fenxiang;
    private boolean result;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_weixin);
        fenxiang = (TextView) findViewById(R.id.WXshare);
        api = WXAPIFactory.createWXAPI(this, Constants.APP_WX_ID, false);
        api.handleIntent(getIntent(), this);
        api.registerApp(Constants.APP_WX_ID);
        result = true;
        result = new SystemUtil(WXEntryActivity.this).isInstallWx(WX_PACKAGE_NAME);
        fenxiang.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                final int wxSdkVersion = api.getWXAppSupportAPI();
                if (result) {
                    final String[] names = { getString(R.string.weixin_shareFri),
                            getString(R.string.weixin_shareFriend) };// 列表中显示的内容组成的数组
                    Dialog alertDialog = new AlertDialog.Builder(WXEntryActivity.this)
                            .setTitle(getString(R.string.weixin_share))// 对话框标题
                            .setItems(names, new DialogInterface.OnClickListener() {// 每一条的名称
                                        @Override
                                        public void onClick(DialogInterface dialog, int which) {// 响应点击事件
                                            WXWebpageObject webpage = new WXWebpageObject();
                                            webpage.webpageUrl = "http://user.qzone.qq.com/839773597/infocenter?ptsig=TgOfwQl-TeREr1OiImE7wJB9LqssLgayOXQ7lH-Aa2c_";
                                            WXMediaMessage msg = new WXMediaMessage(webpage);
                                            msg.title = getString(R.string.app_name);
                                            msg.description = getString(R.string.weixin_description);
                                            Bitmap thumb = BitmapFactory
                                                    .decodeResource(getResources(), R.drawable.logo);
                                            msg.thumbData = Util.bmpToByteArray(thumb, true);


                                            SendMessageToWX.Req req = new SendMessageToWX.Req();
                                            req.transaction = buildTransaction("webpage");
                                            req.message = msg;
                                            switch (which) {
                                            case 0:
                                                req.scene = SendMessageToWX.Req.WXSceneSession;
                                                api.sendReq(req);
                                                WXEntryActivity.this.finish();
                                                break;
                                            case 1:
                                                if (wxSdkVersion >= TIMELINE_SUPPORTED_VERSION) {
                                                    req.scene = SendMessageToWX.Req.WXSceneTimeline;
                                                    api.sendReq(req);
                                                } else {
                                                    Toast.makeText(WXEntryActivity.this,
                                                            getString(R.string.weixin_uninstalledfriend),
                                                            Toast.LENGTH_LONG).show();
                                                }
                                                break;
                                            }
                                        }
                                    }).show();
                    alertDialog.setCanceledOnTouchOutside(true);
                } else {
                    Toast.makeText(WXEntryActivity.this, getString(R.string.weixin_uninstalled), Toast.LENGTH_LONG)
                            .show();
                    WXEntryActivity.this.finish();
                }
            }
        });
    }
    private String buildTransaction(final String type) {
        return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis();
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        setIntent(intent);
        api.handleIntent(intent, this);
    }

    @Override
    public void onReq(BaseReq req) {

    }

    @Override
    public void onResp(BaseResp resp) {
        // android:exported="true" 可以被其它程序调用
        int resultview = 0;
        switch (resp.errCode) {
        case BaseResp.ErrCode.ERR_OK:
            resultview = R.string.errcode_success;
            break;
        case BaseResp.ErrCode.ERR_USER_CANCEL:
            resultview = R.string.errcode_cancel;
            break;
        // case BaseResp.ErrCode.ERR_AUTH_DENIED:
        // resultview = R.string.errcode_deny;
        // break;
        default:
            resultview = R.string.errcode_unknown;
            break;
        }
        Toast.makeText(this, resultview, Toast.LENGTH_LONG).show();
    }

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值