android實現微信朋友圈和微信好友分享功能
阿新 • • 發佈:2018-12-10
今天的這篇文章是基於上一篇微信登入的基礎實現的。可以先看看我的微信登入的實現。
廢話不多說,先看執行效果
首介面,點選微信登入,彈出分享選單,樓主比較懶,圖片和按鈕文字都沒換,希望大家不要介意
點選微信好友
我們到微信看看是否收到
可以看到,沒毛病,再看朋友圈
大家可以看到已經分享成功了呢,是不是很棒呢?
效果看完了,我們再來看下專案結構
這裡主要說一下這個標記部分就是我們點選按鈕彈出的底部選單。
其他的檔案在微信登入裡面都有
這裡重點看一下WXEntryActivity這個檔案
package com.example.weixindemo.wxapi; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.net.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.example.weixindemo.NetUtils; import com.example.weixindemo.NetUtils.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.csdn.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(); bmp.compress(Bitmap.CompressFormat.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分享功能的實現