1. 程式人生 > >android實現微信朋友圈和微信好友分享功能

android實現微信朋友圈和微信好友分享功能

今天的這篇文章是基於上一篇微信登入的基礎實現的。可以先看看我的微信登入的實現。

廢話不多說,先看執行效果

首介面,點選微信登入,彈出分享選單,樓主比較懶,圖片和按鈕文字都沒換,希望大家不要介意

點選微信好友

我們到微信看看是否收到

可以看到,沒毛病,再看朋友圈

大家可以看到已經分享成功了呢,是不是很棒呢?

效果看完了,我們再來看下專案結構

這裡主要說一下這個標記部分就是我們點選按鈕彈出的底部選單。

其他的檔案在微信登入裡面都有

這裡重點看一下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分享功能的實現