今天的这篇文章是基于上一篇微信登录的基础实现的。可以先看看我的微信登录的实现。
废话不多说,先看运行效果
首界面,点击微信登录,弹出分享菜单,楼主比较懒,图片和按钮文字都没换,希望大家不要介意
点击微信好友
我们到微信看看是否收到
可以看到,没毛病,再看朋友圈
大家可以看到已经分享成功了呢,是不是很棒呢?
效果看完了,我们再来看下项目结构
这里主要说一下这个标记部分就是我们点击按钮弹出的底部菜单。
其他的文件在微信登录里面都有
这里重点看一下WXEntryActivity这个文件
package com.example.weixindemo.wxapi;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import .URLEncoder;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentSkipListMap;
import org.json.JSONObject;
import okhttp3.Call;
import okhttp3.Response;
import com.example.weixindemo.App;
import com.example.weixindemo.MainActivity;
import com.Utils;
import com.Utils.MyNetCall;
import com.example.weixindemo.R;
import com.example.weixindemo.bean.WeixinBean;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
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.modelmsg.SendMessageToWX;
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.IWXAPIEventHandler;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
//public static String WX_APP_ID = "wx712ebdaa2ff851b6";
//private String WX_APP_SECRET = "67bc80cf2ee42da9fdcb1d3509fec472";
public static String APP_ID = "wx712ebdaa2ff851b6";
private IWXAPI iwxapi;
public enum SHARE_TYPE {Type_WXSceneSession, Type_WXSceneTimeline}
public String flag;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_wxentry);
iwxapi = WXAPIFactory.createWXAPI(this, APP_ID, false);
iwxapi.handleIntent(getIntent(), this);
iwxapi.registerApp(APP_ID);
flag=getIntent().getStringExtra("flag");
Log.e("TGA",flag+"-----------------flag-----------");
if("1".equals(flag)){
shareWXSceneTimeline();
}else if("2".equals(flag)){
shareWXSceneSession();
}else{
finish();
}
}
public void shareWXSceneSession() {
share(SHARE_TYPE.Type_WXSceneSession);
}
public void shareWXSceneTimeline() {
share(SHARE_TYPE.Type_WXSceneTimeline);
}
private void share(SHARE_TYPE type) {
WXWebpageObject webpageObject = new WXWebpageObject();
webpageObject.webpageUrl = "https://blog..net/k571039838k";
WXMediaMessage msg = new WXMediaMessage(webpageObject);
msg.title = "你好,刘明昆";
msg.description = "这是测试的运用应用";
Bitmap thumb = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
msg.thumbData = bmpToByteArray(thumb, true);
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction("Req");
req.message = msg;
switch (type) {
case Type_WXSceneSession:
req.scene = SendMessageToWX.Req.WXSceneSession;
break;
case Type_WXSceneTimeline:
req.scene = SendMessageToWX.Req.WXSceneTimeline;
break;
}
iwxapi.sendReq(req);
finish();
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
iwxapi.handleIntent(intent, this);
}
@Override
public void onReq(BaseReq baseReq) {
}
@Override
public void onResp(BaseResp resp) {
String result;
switch (resp.errCode) {
case BaseResp.ErrCode.ERR_OK:
result = "分享成功";
// startActivity(new Intent(WXEntryActivity.this,MainActivity.class));
break;
case BaseResp.ErrCode.ERR_USER_CANCEL:
result = "取消分享";
break;
case BaseResp.ErrCode.ERR_AUTH_DENIED:
result = "分享被拒绝";
break;
default:
result = "发送返回";
break;
}
Toast.makeText(this, result, Toast.LENGTH_SHORT).show();
finish();
}
private String buildTransaction(final String type) {
return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis();
}
public static byte[] bmpToByteArray(final Bitmap bmp, final boolean needRecycle) {
ByteArrayOutputStream output = new ByteArrayOutputStream();
press(pressFormat.PNG, 100, output);
if (needRecycle) {
bmp.recycle();
}
byte[] result = output.toByteArray();
try {
output.close();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}
其实也不难理解,和微信登录大致上是一样的,只是调用的方法不一样。
在我们的主Activity里面点击按钮弹出底部菜单直接几行代码就搞定
final BottomDialog dialog=new BottomDialog(MainActivity.this);
dialog.title(R.string.title) //设置标题
.layout(BottomDialog.GRID) //设置内容 layout,默认为线性(LinearLayout)
.orientation(BottomDialog.VERTICAL) //设置滑动方向,默认为横向
.inflateMenu(R.menu.main,new OnItemClickListener() { //设置监听
@Override
public void click(Item item) {
//单机按钮后的逻辑
}
}).show();
这个底部弹框是观摩了别人写的BottomDialog ,大家也可以直接引用别人的依赖库。
到此,今天的微信分享就讲完了。希望对大家有所帮助,也希望大家多多支持我。
下一章节将讲解使用QQ分享功能的实现
我的博客地址:https://blog..net/k571039838k
Demo下载地址