700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > android 微信登录与分享集成

android 微信登录与分享集成

时间:2020-05-17 11:43:34

相关推荐

android 微信登录与分享集成

android 微信登录与分享

android微信登录与分享这两个功能是很常用的,尤其是现在微信用户日益剧增,qq虽然很经典但是感觉大多数用来办公 每个写android的小伙伴估计都会写到这个功能,我也是很久没有写android了,这相当于是在毕业之后工作上面第一次写安卓

程序,不管会不会,就是写。总会有办法解决问题的。

一、若要想深究其原理请查看官方文档 https://open./cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419317851&token=3b00b7ce045a5330c4ff3325aef6d4bd19687bc9&lang=zh_CN 二、准备工作

1、目前移动应用上微信登录只提供原生的登录方式,需要用户安装微信客户端才能配合使用。2、对于Android应用,建议总是显示微信登录按钮,当用户手机没有安装微信客户端时,请引导用户下载安装微信客户端。3、对于iOS应用,考虑到iOS应用商店审核指南中的相关规定,建议开发者接入微信登录时,先检测用户手机是否已安装微信客户端(使用sdk中isWXAppInstalled函数 ),对未安装的用户隐藏微信登录按钮,只提供其他登录方式(比如手机号注册登录、游客登录等)。

三、授权流程说明

1. 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;2. 通过code参数加上AppID和AppSecret等,通过API换取access_token;3. 通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。

四、集成流程和代码,感觉看了上面和官网的的流程也没有什么感觉,下面直接开始走流程

(1)微信开放平台上账号中心申请成为开发者

(2)在管理中心,创建一个应用,官网填写一个域名,需要注意的就是应用签名,应用签名也不需要此时就填写,或者随便填写一个,后面再用android studio打包生成apk安装在桌面然后在用工具GenSignature获取,虽然在程序里面不用,但是在微信里面是对应用签名作了校验,如果不对会在微信登录时候回调返回-6,应用包名需要与程序里面的包名一样,也就是与清单文件第二行的包名package一致,应用下载地址可不填

(3)android studio作为开发工具,代码目录结构如图所示,JavaScriptUtil类多画进去了。

(4)build.gradle

// 微信sdkcompile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'//google Gsoncompile group: 'com.google.code.gson', name: 'gson', version: '2.8.0'

(5)AnfroidMainfest.xml

<!--微信登录--><activity android:name=".wxapi.WXEntryActivity"android:exported="true"></activity>

(6)WXEntryActivity类,在com.iwiteks. PalamarToutism包下面新建wxapi包并新建WXEntryActivity类,注意名字和包名必须是wxapi和WXEntryActivity。

package com.iwiteks.PalmarTourism.wxapi;import android.app.Activity;import android.os.Bundle;import android.os.Message;import android.util.Log;import android.view.WindowManager;import android.widget.Toast;import com.google.gson.Gson;import com.iwiteks.PalmarTourism.bean.WeChatInfo;import com.mon.Config;import com.iwiteks.PalmarTourism.util.JavaScriptUtils;import com.iwiteks.PalmarTourism.util.OkHttpUtils;import com.tencent.mm.opensdk.modelbase.BaseReq;import com.tencent.mm.opensdk.modelbase.BaseResp;import com.tencent.mm.opensdk.modelmsg.SendAuth;import com.tencent.mm.opensdk.openapi.IWXAPI;import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler;import com.tencent.mm.opensdk.openapi.WXAPIFactory;import org.json.JSONException;import org.json.JSONObject;/*** 创建于 /1/30 15:45** @author zhaoyi* */public class WXEntryActivity extends Activity implements IWXAPIEventHandler {public int WX_LOGIN = 1;private IWXAPI iwxapi;private SendAuth.Resp resp;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// getSupportActionBar().hide();// 隐藏状态栏getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);iwxapi = WXAPIFactory.createWXAPI(this, Config.APP_ID, true);//接收到分享以及登录的intent传递handleIntent方法,处理结果iwxapi.handleIntent(getIntent(), this);}@Overridepublic void onReq(BaseReq baseReq) {}//请求回调结果处理@Overridepublic void onResp(BaseResp baseResp) {System.out.println("------------------------" + baseResp.getType());//微信登录为getType为1,分享为0if (baseResp.getType() == WX_LOGIN){//登录回调// System.out.println("------------登陆回调------------");resp = (SendAuth.Resp) baseResp;// System.out.println("------------登陆回调的结果------------:" + new Gson().toJson(resp));switch (resp.errCode) {case BaseResp.ErrCode.ERR_OK:String code = String.valueOf(resp.code);//获取用户信息getAccessToken(code);break;case BaseResp.ErrCode.ERR_AUTH_DENIED://用户拒绝授权Toast.makeText(WXEntryActivity.this, "用户拒绝授权", Toast.LENGTH_LONG).show();break;case BaseResp.ErrCode.ERR_USER_CANCEL://用户取消Toast.makeText(WXEntryActivity.this, "用户取消登录", Toast.LENGTH_LONG).show();break;default:break;}}else{//分享成功回调System.out.println("------------分享回调------------");switch (baseResp.errCode) {case BaseResp.ErrCode.ERR_OK://分享成功Toast.makeText(WXEntryActivity.this, "分享成功", Toast.LENGTH_LONG).show();break;case BaseResp.ErrCode.ERR_USER_CANCEL://分享取消Toast.makeText(WXEntryActivity.this, "分享取消", Toast.LENGTH_LONG).show();break;case BaseResp.ErrCode.ERR_AUTH_DENIED://分享拒绝Toast.makeText(WXEntryActivity.this, "分享拒绝", Toast.LENGTH_LONG).show();break;}}finish();}private void getAccessToken(String code) {//获取授权String http = "https://api./sns/oauth2/access_token?appid=" + Config.APP_ID + "&secret=" + Config.APP_SERECET + "&code=" + code + "&grant_type=authorization_code";OkHttpUtils.ResultCallback<String> resultCallback = new OkHttpUtils.ResultCallback<String>() {@Overridepublic void onSuccess(String response) {String access = null;String openId = null;try {JSONObject jsonObject = new JSONObject(response);access = jsonObject.getString("access_token");openId = jsonObject.getString("openid");} catch (JSONException e) {e.printStackTrace();}//获取个人信息String getUserInfo = "https://api./sns/userinfo?access_token=" + access + "&openid=" + openId + "";OkHttpUtils.ResultCallback<WeChatInfo> resultCallback = new OkHttpUtils.ResultCallback<WeChatInfo>() {@Overridepublic void onSuccess(WeChatInfo response) {response.setErrCode(resp.errCode);Log.i("TAG获取个人信息",new Gson().toJson(response));// Toast.makeText(WXEntryActivity.this, new Gson().toJson(response), Toast.LENGTH_LONG).show();finish();}@Overridepublic void onFailure(Exception e) {Toast.makeText(WXEntryActivity.this, "登录失败", Toast.LENGTH_SHORT).show();}};OkHttpUtils.get(getUserInfo, resultCallback);}@Overridepublic void onFailure(Exception e) {Toast.makeText(WXEntryActivity.this, "登录失败", Toast.LENGTH_SHORT).show();}};OkHttpUtils.get(http, resultCallback);}}

(7)WxShareAndLoginUtils类

package com.iwiteks.PalmarTourism.util;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.widget.Toast;import com.mon.Config;import com.tencent.mm.opensdk.modelmsg.SendAuth;import com.tencent.mm.opensdk.modelmsg.SendMessageToWX;import com.tencent.mm.opensdk.modelmsg.WXImageObject;import com.tencent.mm.opensdk.modelmsg.WXMediaMessage;import com.tencent.mm.opensdk.modelmsg.WXTextObject;import com.tencent.mm.opensdk.modelmsg.WXWebpageObject;import com.tencent.mm.opensdk.openapi.IWXAPI;import com.tencent.mm.opensdk.openapi.WXAPIFactory;import java.io.IOException;import java.io.InputStream;import .URL;import .URLConnection;/*** Created by zhaoyi on /02/01.*/public class WxShareAndLoginUtils {public static int WECHAT_FRIEND = 0; //分享好友public static int WECHAT_MOMENT = 1; //分享朋友圈private static IWXAPI iwxapi;public static IWXAPI getWXAPI(Context context){if (iwxapi == null){//通过WXAPIFactory创建IWAPI实例iwxapi = WXAPIFactory.createWXAPI(context, Config.APP_ID, false);//将应用的appid注册到微信iwxapi.registerApp(Config.APP_ID);}return iwxapi;}/*** 微信登录*/public static void WxLogin(Context context) {if (!judgeCanGo(context)){return;}SendAuth.Req req = new SendAuth.Req();//授权域 获取用户个人信息则填写snsapi_userinforeq.scope = "snsapi_userinfo";//用于保持请求和回调的状态 可以任意填写req.state = "test_login";iwxapi.sendReq(req);}/*** 分享文本至朋友圈* @param text 文本内容* @param judge 类型选择 好友-WECHAT_FRIEND 朋友圈-WECHAT_MOMENT*/public static void WxTextShare(Context context,String text,int judge){if (!judgeCanGo(context)){return;}//初始化WXTextObject对象,填写对应分享的文本内容WXTextObject textObject = new WXTextObject();textObject.text = text;//初始化WXMediaMessage消息对象,WXMediaMessage message = new WXMediaMessage();message.mediaObject = textObject;message.description = text;//构建一个Req请求对象SendMessageToWX.Req req = new SendMessageToWX.Req();req.transaction = String.valueOf(System.currentTimeMillis()); //transaction用于标识请求req.message = message;req.scene = judge;//分享类型 好友==0 朋友圈==1//发送请求iwxapi.sendReq(req);}/*** 分享图片* @param bitmap 图片bitmap,建议别超过32k* @param judge 类型选择 好友-WECHAT_FRIEND 朋友圈-WECHAT_MOMENT*/public static void WxBitmapShare(Context context, Bitmap bitmap,int judge){if (!judgeCanGo(context)){return;}WXImageObject wxImageObject = new WXImageObject(bitmap);WXMediaMessage message = new WXMediaMessage();message.mediaObject = wxImageObject;Bitmap thunmpBmp = Bitmap.createScaledBitmap(bitmap,50,50,true);bitmap.recycle();message.thumbData = ImageUtil.bmpToByteArray(thunmpBmp,true);SendMessageToWX.Req req = new SendMessageToWX.Req();req.transaction = String.valueOf(System.currentTimeMillis());req.message = message;req.scene = judge;iwxapi.sendReq(req);}/*** 网页分享* @param url 地址* @param title 标题* @param description 描述* @param judge 类型选择 好友-WECHAT_FRIEND 朋友圈-WECHAT_MOMENT*/public static void WxUrlShare(Context context,String url,String title,String description,String imgUrl,int judge){if (!judgeCanGo(context)){return;}Bitmap bitmap = getBitMBitmap(imgUrl);WXWebpageObject wxWebpageObject = new WXWebpageObject();wxWebpageObject.webpageUrl = url;WXMediaMessage wxMediaMessage = new WXMediaMessage(wxWebpageObject);wxMediaMessage.title = title;wxMediaMessage.description = description;Bitmap thunmpBmp = Bitmap.createScaledBitmap(bitmap,50,50,true);bitmap.recycle();wxMediaMessage.thumbData = ImageUtil.bmpToByteArray(thunmpBmp,true);SendMessageToWX.Req req = new SendMessageToWX.Req();req.transaction = String.valueOf(System.currentTimeMillis());req.message = wxMediaMessage;req.scene = judge;iwxapi.sendReq(req);}private static boolean judgeCanGo(Context context){getWXAPI(context);if (!iwxapi.isWXAppInstalled()) {Toast.makeText(context, "请先安装微信应用", Toast.LENGTH_SHORT).show();return false;} else if (!iwxapi.isWXAppSupportAPI()) {Toast.makeText(context, "请先更新微信应用", Toast.LENGTH_SHORT).show();return false;}return true;}/*** 图片url转bitmap*/public static Bitmap getBitMBitmap(String urlpath) {Bitmap map = null;try {URL url = new URL(urlpath);URLConnection conn = url.openConnection();conn.connect();InputStream in;in = conn.getInputStream();map = BitmapFactory.decodeStream(in);// TODO Auto-generated catch block} catch (IOException e) {e.printStackTrace();}return map;}}

(8)OkHttpUtils类

package com.iwiteks.PalmarTourism.util;import android.os.Handler;import android.os.Looper;import com.google.gson.Gson;import com.google.gson.internal.$Gson$Types;import java.io.IOException;import java.lang.reflect.ParameterizedType;import java.lang.reflect.Type;import java.util.List;import java.util.concurrent.TimeUnit;import okhttp3.Call;import okhttp3.Callback;import okhttp3.FormBody;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.RequestBody;import okhttp3.Response;/*** By zhaoyi* Description : OkHttp网络连接封装工具类 解析用的是Gson 记得添加Gson依赖 或者jar包*/public class OkHttpUtils {private static final String TAG = "OkHttpUtils";private static OkHttpUtils mInstance;private OkHttpClient mOkHttpClient;private Handler mDelivery;private Gson mGson;private OkHttpUtils() {mOkHttpClient = new OkHttpClient.Builder().connectTimeout(10, TimeUnit.SECONDS).writeTimeout(10, TimeUnit.SECONDS).readTimeout(30, TimeUnit.SECONDS).build();mGson = new Gson();mDelivery = new Handler(Looper.getMainLooper());}private synchronized static OkHttpUtils getmInstance() {if (mInstance == null) {mInstance = new OkHttpUtils();}return mInstance;}private void getRequest(String url, final ResultCallback callback) {final Request request = new Request.Builder().url(url).build();deliveryResult(callback, request);}private void postRequest(String url, final ResultCallback callback, List<Param> params) {Request request = buildPostRequest(url, params);deliveryResult(callback, request);}/*** 处理结果* @param callback* @param request*/private void deliveryResult(final ResultCallback callback, Request request) {mOkHttpClient.newCall(request).enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) {sendFailCallback(callback, e);}@Overridepublic void onResponse(Call call, Response response) throws IOException {try {String str = response.body().string();if (callback.mType == String.class) {/*** 返回字符串*/sendSuccessCallBack(callback, str);} else {/*** 这里处理解析返回对象*/Object object = mGson.fromJson(str, callback.mType);sendSuccessCallBack(callback, object);}} catch (final Exception e) {//LogUtils.e(TAG, "convert json failure", e);sendFailCallback(callback, e);}}});}private void sendFailCallback(final ResultCallback callback, final Exception e) {mDelivery.post(new Runnable() {@Overridepublic void run() {if (callback != null) {callback.onFailure(e);}}});}private void sendSuccessCallBack(final ResultCallback callback, final Object obj) {mDelivery.post(new Runnable() {@Overridepublic void run() {if (callback != null) {callback.onSuccess(obj);}}});}private Request buildPostRequest(String url, List<Param> params) {FormBody.Builder builder= new FormBody.Builder();for (Param param : params) {builder.add(param.key, param.value);}RequestBody requestBody = builder.build();return new Request.Builder().url(url).post(requestBody).build();}/**********************对外接口************************//*** get请求* @param url 请求url* @param callback 请求回调*/public static void get(String url, ResultCallback callback) {getmInstance().getRequest(url, callback);}/*** post请求* @param url 请求url* @param callback 请求回调* @param params 请求参数*/public static void post(String url, final ResultCallback callback, List<Param> params) {getmInstance().postRequest(url, callback, params);}/*** http请求回调类,回调方法在UI线程中执行* @param <T>*/public static abstract class ResultCallback<T> {Type mType;public ResultCallback(){mType = getSuperclassTypeParameter(getClass());}static Type getSuperclassTypeParameter(Class<?> subclass) {Type superclass = subclass.getGenericSuperclass();if (superclass instanceof Class) {throw new RuntimeException("Missing type parameter.");}ParameterizedType parameterized = (ParameterizedType) superclass;return $Gson$Types.canonicalize(parameterized.getActualTypeArguments()[0]);}/*** 请求成功回调* @param response*/public abstract void onSuccess(T response);/*** 请求失败回调* @param e*/public abstract void onFailure(Exception e);}/*** post请求参数类 这里可以根据项目抽取成泛型*/public static class Param {String key;String value;public Param() {}public Param(String key, String value) {this.key = key;this.value = value;}}}

(9)ImageUtil类

package com.iwiteks.PalmarTourism.util;import android.graphics.Bitmap;import android.pressFormat;import android.graphics.BitmapFactory;import android.util.Log;import junit.framework.Assert;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.IOException;import java.io.InputStream;import java.io.RandomAccessFile;import .HttpURLConnection;import .MalformedURLException;import .URL;import .URLConnection;public class ImageUtil {private static final String TAG = "SDK_Sample.ImageUtil";public static byte[] bmpToByteArray(final Bitmap bmp, final boolean needRecycle) {ByteArrayOutputStream output = new ByteArrayOutputStream();press(CompressFormat.PNG, 100, output);if (needRecycle) {bmp.recycle();}byte[] result = output.toByteArray();try {output.close();} catch (Exception e) {e.printStackTrace();}return result;}public static byte[] getHtmlByteArray(final String url) {URL htmlUrl = null;InputStream inStream = null;try { htmlUrl = new URL(url); URLConnection connection = htmlUrl.openConnection(); HttpURLConnection httpConnection = (HttpURLConnection)connection; int responseCode = httpConnection.getResponseCode(); if(responseCode == HttpURLConnection.HTTP_OK){ inStream = httpConnection.getInputStream(); }} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) { e.printStackTrace(); } byte[] data = inputStreamToByte(inStream);return data;}public static byte[] inputStreamToByte(InputStream is) {try{ByteArrayOutputStream bytestream = new ByteArrayOutputStream();int ch;while ((ch = is.read()) != -1) {bytestream.write(ch);}byte imgdata[] = bytestream.toByteArray();bytestream.close();return imgdata;}catch(Exception e){e.printStackTrace();}return null;}public static byte[] readFromFile(String fileName, int offset, int len) {if (fileName == null) {return null;}File file = new File(fileName);if (!file.exists()) {Log.i(TAG, "readFromFile: file not found");return null;}if (len == -1) {len = (int) file.length();}Log.d(TAG, "readFromFile : offset = " + offset + " len = " + len + " offset + len = " + (offset + len));if(offset <0){Log.e(TAG, "readFromFile invalid offset:" + offset);return null;}if(len <=0 ){Log.e(TAG, "readFromFile invalid len:" + len);return null;}if(offset + len > (int) file.length()){Log.e(TAG, "readFromFile invalid file len:" + file.length());return null;}byte[] b = null;try {RandomAccessFile in = new RandomAccessFile(fileName, "r");b = new byte[len];in.seek(offset);in.readFully(b);in.close();} catch (Exception e) {Log.e(TAG, "readFromFile : errMsg = " + e.getMessage());e.printStackTrace();}return b;}private static final int MAX_DECODE_PICTURE_SIZE = 1920 * 1440;public static Bitmap extractThumbNail(final String path, final int height, final int width, final boolean crop) {Assert.assertTrue(path != null && !path.equals("") && height > 0 && width > 0);BitmapFactory.Options options = new BitmapFactory.Options();try {options.inJustDecodeBounds = true;Bitmap tmp = BitmapFactory.decodeFile(path, options);if (tmp != null) {tmp.recycle();tmp = null;}Log.d(TAG, "extractThumbNail: round=" + width + "x" + height + ", crop=" + crop);final double beY = options.outHeight * 1.0 / height;final double beX = options.outWidth * 1.0 / width;Log.d(TAG, "extractThumbNail: extract beX = " + beX + ", beY = " + beY);options.inSampleSize = (int) (crop ? (beY > beX ? beX : beY) : (beY < beX ? beX : beY));if (options.inSampleSize <= 1) {options.inSampleSize = 1;}// NOTE: out of memory errorwhile (options.outHeight * options.outWidth / options.inSampleSize > MAX_DECODE_PICTURE_SIZE) {options.inSampleSize++;}int newHeight = height;int newWidth = width;if (crop) {if (beY > beX) {newHeight = (int) (newWidth * 1.0 * options.outHeight / options.outWidth);} else {newWidth = (int) (newHeight * 1.0 * options.outWidth / options.outHeight);}} else {if (beY < beX) {newHeight = (int) (newWidth * 1.0 * options.outHeight / options.outWidth);} else {newWidth = (int) (newHeight * 1.0 * options.outWidth / options.outHeight);}}options.inJustDecodeBounds = false;Log.i(TAG, "bitmap required size=" + newWidth + "x" + newHeight + ", orig=" + options.outWidth + "x" + options.outHeight + ", sample=" + options.inSampleSize);Bitmap bm = BitmapFactory.decodeFile(path, options);if (bm == null) {Log.e(TAG, "bitmap decode failed");return null;}Log.i(TAG, "bitmap decoded size=" + bm.getWidth() + "x" + bm.getHeight());final Bitmap scale = Bitmap.createScaledBitmap(bm, newWidth, newHeight, true);if (scale != null) {bm.recycle();bm = scale;}if (crop) {final Bitmap cropped = Bitmap.createBitmap(bm, (bm.getWidth() - width) >> 1, (bm.getHeight() - height) >> 1, width, height);if (cropped == null) {return bm;}bm.recycle();bm = cropped;Log.i(TAG, "bitmap croped size=" + bm.getWidth() + "x" + bm.getHeight());}return bm;} catch (final OutOfMemoryError e) {Log.e(TAG, "decode bitmap failed: " + e.getMessage());options = null;}return null;}}

(9)Config类

package com.mon;public class Config {public static final String APP_ID = "wx26220645ffbf32";//设置估计有问题public static final String APP_SERECET = "3086b32df76fe49a1e2863c18799";}

(10)WechatInfo类

package com.iwiteks.PalmarTourism.bean;/*** Created by zhaoyi on /11/28.*/public class WeChatInfo {private int errCode;private String openid;private int sex;private String nickname;private String headimgurl;private String province;private String language;private String country;private String unionid;public String getOpenid() {return openid;}public void setOpenid(String openid) {this.openid = openid;}public String getNickname() {return nickname;}public void setNickname(String nickname) {this.nickname = nickname;}public String getHeadimgurl() {return headimgurl;}public void setHeadimgurl(String headimgurl) {this.headimgurl = headimgurl;}public String getSex() {return (sex == 0) ? "男" : "女";}public String getProvince() {return province;}public void setProvince(String province) {this.province = province;}public String getLanguage() {return language;}public void setLanguage(String language) {this.language = language;}public String getCountry() {return country;}public void setCountry(String country) {this.country = country;}public String getUnionid() {return unionid;}public void setUnionid(String unionid) {this.unionid = unionid;}public void setSex(int sex) {this.sex = sex;}public int getErrCode() {return errCode;}public void setErrCode(int errCode) {this.errCode = errCode;}@Overridepublic String toString() {return "WeChatInfo{" +"errCode='" + errCode + '\'' +", openid='" + openid + '\'' +", sex=" + sex +", nickname='" + nickname + '\'' +", headimgurl='" + headimgurl + '\'' +", province='" + province + '\'' +", language='" + language + '\'' +", country='" + country + '\'' +", unionid='" + unionid + '\'' +'}';}}

(11)WeiXinActivity类

package com.iwiteks.PalmarTourism.activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import com.iwiteks.PalmarTourism.R;import com.iwiteks.PalmarTourism.util.WxShareAndLoginUtils;/*** Created by zhaoyi on /2/1.*/public class WeiXinActivity extends AppCompatActivity{private Button btn,btn_text,btn_image,btn_url;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_weixin);btn = (Button) findViewById(R.id.btn);btn_text = (Button) findViewById(R.id.btn_text);btn_image = (Button) findViewById(R.id.btn_image);btn_url = (Button) findViewById(R.id.btn_url);// 测试微信登录btn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {WxShareAndLoginUtils.WxLogin(WeiXinActivity.this);}});btn_text.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {WxShareAndLoginUtils.WxTextShare(WeiXinActivity.this,"微信分享",WxShareAndLoginUtils.WECHAT_MOMENT);}});btn_image.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);WxShareAndLoginUtils.WxBitmapShare(WeiXinActivity.this,bitmap,WxShareAndLoginUtils.WECHAT_MOMENT);}});btn_url.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {WxShareAndLoginUtils.WxUrlShare(WeiXinActivity.this,"", "百度", "百度一下","/search/detail?ct=503316480&z=0&ipn=d&word=%E7%99%BE%E5%BA%A6logo&step_word=&hs=0&pn=7&spn=0&di=87711457570&pi=0&rn=1&tn=baiduimagedetail&is=0%2C0&istype=2&ie=utf-8&oe=utf-8&in=&cl=2&lm=-1&st=-1&cs=3295332534%2C276154593&os=1276437059%2C1808669272&simid=3478872735%2C168961746&adpicid=0&lpn=0&ln=1958&fr=&fmq=1517922230276_R&fm=detail&ic=0&s=undefined&se=&sme=&tab=0&width=&height=&face=undefined&ist=&jit=&cg=&bdtype=0&oriquery=&objurl=http%3A%2F%%2Ffile%2Fupload%2F06%2F20%2F12-13-15-92-1.png&fromurl=ippr_z2C%24qAzdH3FAzdH3Fooo_z%26e3Bfoiwtujg2_z%26e3Bv54AzdH3Fk6wg1AzdH3Ffi5o-ldl_z%26e3Bip4s&gsm=0&rpstart=0&rpnum=0",WxShareAndLoginUtils.WECHAT_FRIEND);}});}}

(12)activity_weixin.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"xmlns:tools="/tools"android:id="@+id/activity_main"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><Buttonandroid:id="@+id/btn"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="登录" /><Buttonandroid:id="@+id/btn_text"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="分享文本" /><Buttonandroid:id="@+id/btn_image"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="分享图片" /><Buttonandroid:id="@+id/btn_url"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="分享网址" /></LinearLayout>

(13) 到此微信登录与微信与微信分享就可以实现了,若有问题可以私信我

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。