Android應(yīng)用實現(xiàn)微信分享(微信好友莲组,朋友圈),分享鏈接暖夭,圖片锹杈,文字

科技快訊

?9月2日晚間,華為終端宣布迈着,將于10月16日在德國慕尼黑發(fā)布華為?Mate?10?新機竭望。從放出的海報來看,證實了華為?Mate?10?將搭載自家的麒麟970處理器裕菠,并采用時下流行的全面屏設(shè)計咬清。根據(jù)之前的報道,華為?Mate?10依然使用了徠卡品牌的攝像頭奴潘,同時兩個攝像頭分別是1200萬彩色和2000萬黑白組合旧烧。另外該機搭載?QHD“Entire?View”?顯示屏,屏幕尺寸為6英寸画髓。據(jù)悉掘剪,Mate10?還將集成人工智能功能。

寫在前面

?本人最近一直在和百度地圖打交道奈虾,之前一點都沒有接觸過百度地圖夺谁,到了這家公司才開始接觸這個東西,發(fā)現(xiàn)這個東西里邊真的有很多坑肉微,(小小炫耀一下予权,通過自己堅持不懈的努力,還是解決了所有的問題)浪册,最近利用閑暇時間還看了郭神的帖子扫腺,一起看了一下Glide的源碼,說實話Glide的源碼真的很難村象,想想自己當(dāng)時在看Fresco源碼的時候并沒有那么難笆环,他為什么這么難呢,就是因為他更加的完整厚者,無論從代碼功能躁劣,還是從性能上來講Glide封裝的都是比較健壯的。好了不說了库菲,接下來就說說最近做的微信分享的過程和心得吧账忘!

微信分享

????? 本人之前也很少接觸分享這一塊,公司有專門的人員搞一些三方的東西,可能當(dāng)時還小犯懶鳖擒,人家做好了之后就沒有去看溉浙。

????? 想要集成微信分享(分享出去之后顯示的App名稱是自己的App名稱)那么

第一步:

你要在微信開放平臺上注冊自己的App,等待審核蒋荚,這個過程是很繁瑣的戳稽,微信的審核也是相當(dāng)嚴(yán)格的,我自己在注冊的時候就被駁回了三次期升。

打開微信開放平臺惊奇,首先你要注冊自己的開發(fā)者信息,這個你們自己注冊就好了播赁。后邊的填寫平臺信息是比較簡單的颂郎,自己按照上邊的要求填寫就好了。

這時候比較煩的問題就來了容为,你要耐心的等待乓序,我注冊的時候一般是三個工作日內(nèi)給我的審核結(jié)果,等待審核結(jié)果并不算啥舟奠,最煩心的是審核不通過,這時候你就要重新修改各種東西房维,重新提交沼瘫,然后再等待。審核通過之后點擊登陸成功那個頁面的正上方有一個管理中心的按鈕咙俩,點進(jìn)去你會看見這個頁面:

點擊右邊的查看:

第二步:

接下來就是開始集成了:首先在build.gradle文件中耿戚,添加如下依賴即可:

dependencies?{

????compile?'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'

}

或者:

dependencies?{

????compile?'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'

}

然后添加必要的權(quán)限支持:

uses-permission android:name="android.permission.INTERNET"

uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"

uses-permission android:name="android.permission.ACCESS_WIFI_STATE"

uses-permission android:name="android.permission.READ_PHONE_STATE"

uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"

將自己在微信開放平臺上注冊之后拿到的APP_ID進(jìn)行注冊:

public class AppRegister extends BroadcastReceiver {

@Override? ??

public void onReceive(Context context,Intent intent) {

????final IWXAPI api =WXAPIFactory.createWXAPI(context,null);

????// 將該app注冊到微信? ? ? ??

?????api.registerApp(WXShare.APP_ID);? ??

????}

}

創(chuàng)建OnResponseListener接口:

public interface OnResponseListener {

????//分享成功的回調(diào)?

?????void onSuccess();

????//分享取消的回調(diào) void onCancel();

????//分享失敗的回調(diào) void onFail(String message);

}

再繼續(xù)創(chuàng)建WXShare類,因為我只做了分享文字和鏈接阿趁,在下邊我會給大家補上一個分享圖片的方法膜蛔。

public class WXShare {? ?

?????//這個APP_ID是我個人的,可以供大家使用

????public static final String APP_ID ="wx10e48798def4a607";

????public static final String ACTION_SHARE_RESPONSE="action_wx_share_response";

????public static final String EXTRA_RESULT ="result";

????private final Context context;private final IWXAPI api;

????private OnResponseListener listener;

????private ResponseReceiver receiver;

????public WXShare(Context context) {

????????api =WXAPIFactory.createWXAPI(context,APP_ID);

????????this.context =context;? ??

????}

????public WXShare register() {

????????// 微信分享? ? ? ??

????????api.registerApp(APP_ID);

????????receiver =new ResponseReceiver();

????????IntentFilter filter=new IntentFilter(ACTION_SHARE_RESPONSE);

????????context.registerReceiver(receiver,filter);

????????return this;? ??

????}

????public void unregister() {

????????try {

????????????api.unregisterApp();

????????????context.unregisterReceiver(receiver);? ? ? ??

????????}catch (Exception e) {

????????????e.printStackTrace();?

?????? ? ? }? ??

????}

????public WXShare share(String text) {

????????WXTextObject textObj =new WXTextObject();

????????textObj.text =text;

????????WXMediaMessage msg =new WXMediaMessage();

????????msg.mediaObject =textObj;//? ? ? ??

????????msg.title = "Will be ignored";? ? ? ??

????????msg.description =text;

????????SendMessageToWX.Req req =new SendMessageToWX.Req();

????????req.transaction =buildTransaction("text");

????????req.message =msg;req.scene =SendMessageToWX.Req.WXSceneSession;

????????boolean result =api.sendReq(req);

????????Log.e("text shared: " +result,"");

????????return this;? ??

????}? ? //flag用來判斷是分享到微信好友還是分享到微信朋友圈脖阵,? ??

????//0代表分享到微信好友皂股,1代表分享到朋友圈

? ? ?public WXShare shareUrl(int flag,Context context,String url,String title,String descroption){

????//初始化一個WXWebpageObject填寫url? ? ? ?

? ? WXWebpageObject webpageObject =new WXWebpageObject();

????webpageObject.webpageUrl =url;

????//用WXWebpageObject對象初始化一個WXMediaMessage,天下標(biāo)題命黔,描述? ? ? ? ????WXMediaMessage msg =new WXMediaMessage(webpageObject);

????msg.title =title;msg.description =descroption;? ? ? ?

?????//這塊需要注意呜呐,圖片的像素千萬不要太大,不然的話會調(diào)不起來微信分享悍募,? ? ? ??

????//我在做的時候和我們這的UIMM說隨便給我一張圖蘑辑,她給了我一張1024*1024的圖片? ? ? ?

?????//當(dāng)時也不知道什么原因,后來在我的機智之下?lián)Q了一張像素小一點的圖片好了坠宴!

????????Bitmap thumb =BitmapFactory.decodeResource(context.getResources()

????????????,R.mipmap.dadaoicon);

????msg.setThumbImage(thumb);

????SendMessageToWX.Req req =new ????SendMessageToWX.Req();

????req.transaction =String.valueOf(System.currentTimeMillis());

????req.message =msg;req.scene=flag==0SendMessageToWX.Req.WXSceneSession:

????????????SendMessageToWX.Req.WXSceneTimeline;

????api.sendReq(req);return this;? ??

}

????public IWXAPI getApi() {

????????return api;? ??

????}

????public void setListener(OnResponseListener listener) {

????????this.listener =listener;? ??

????}

????private String buildTransaction(final String type) {

????????return (type ==null) ?String.valueOf(System.currentTimeMillis()) :type ????????????+System.currentTimeMillis();? ??

????}

????private class ResponseReceiver extends BroadcastReceiver {

????????@Override? ? ? ??

????????public void onReceive(Context context,Intent intent) {

????????????Response response =intent.getParcelableExtra(EXTRA_RESULT);

????????????Log.e("type: " +response.getType(),"type: " +response.getType());

????????????Log.e("errCode: " +response.errCode,"errCode: " +response.errCode);

????????????String result;

????????????????if (listener !=null) {

????????????????????if (response.errCode ==BaseResp.ErrCode.ERR_OK) {

????????????????????????listener.onSuccess();? ? ? ? ? ? ? ??

????????????????????}else if (response.errCode ==BaseResp.ErrCode.ERR_USER_CANCEL){

????????????????????????listener.onCancel();? ? ? ? ? ? ? ??

????????????????????}else {

????????????????????????switch (response.errCode) {

????????????????????????????case BaseResp.ErrCode.ERR_AUTH_DENIED:

????????????????????????????????result ="發(fā)送被拒絕";

????????????????????????????break;

????????????????????????????case BaseResp.ErrCode.ERR_UNSUPPORT:

????????????????????????????????result ="不支持錯誤";

? ? ? ? ? ? ? ? ? ? ? ? ? ? break;

????????????????????????????default:

????????????????????????????????result ="發(fā)送返回";

????????????????????????????break;? ? ? ? ? ? ? ? ? ??

????????????????????????}

????????????????????listener.onFail(result);? ? ? ? ? ? ? ??

????????????????????}? ? ? ? ? ??

????????????????}? ? ? ??

????????????}? ??

????????}

????????public static class Response extends BaseResp implements Parcelable {

????????????public int errCode;

????????????public String errStr;

????????????public String transaction;

????????????public String openId;

????????????private int type;

????????????private boolean checkResult;

????????????public Response(BaseResp baseResp) {

????????????????errCode =baseResp.errCode;errStr =baseResp.errStr;

????????????????transaction =baseResp.transaction;openId =baseResp.openId;

????????????????type =baseResp.getType();checkResult =baseResp.checkArgs();? ? ? ??

????????????}

????????????@Override? ? ? ??

????????????public int getType() {

????????????????return type;? ? ? ??

????????????}

????????????@Override? ? ? ??

????????????public boolean checkArgs() {

????????????????return checkResult;? ? ? ??

????????????}

????????????@Override? ? ? ??

? ? ? ? ? ? public int describeContents() {

? ? ? ? ? ? ? ? return 0;? ? ? ??

? ? ? ? ? ? }

????????????@Override? ? ? ??

????????????public void writeToParcel(Parcel dest,int flags) {

????????????????dest.writeInt(this.errCode);

????????????????dest.writeString(this.errStr);

????????????????dest.writeString(this.transaction);

????????????????dest.writeString(this.openId);

????????????????dest.writeInt(this.type);

????????????????dest.writeByte(this.checkResult ? (byte)1 : (byte)0);? ? ? ??

????????????}

????????????protected Response(Parcel in) {

????????????????this.errCode =in.readInt();

????????????????this.errStr =in.readString();

????????????????this.transaction =in.readString();

????????????????this.openId =in.readString();

????????????????this.type =in.readInt();

????????????????this.checkResult =in.readByte() !=0;? ? ? ??

????????????}

? ? ? ? ? ?public static final CreatorCREATOR =new Creator() {

????????????????@Override? ? ? ? ? ? ????

????????????????public Response createFromParcel(Parcel source) {

????????????????????return new Response(source);? ? ? ? ? ??

????????????????}

????????????????@Override? ? ? ? ? ??

????????????????????public Response[]newArray(int size) {return new Response[size];? ? ? ? ? ??

????????????????}? ? ? ??

????????????};? ??

????????}

????}

創(chuàng)建WXEntryActivity,用于和微信App進(jìn)行交互:

public class WXEntryActivity extends AppCompatActivity implements IWXAPIEventHandler {

????private IWXAPI api;

????private WXShare wxShare;

? ? @Override? ??

????protected void onCreate(Bundle savedInstanceState) {

????????super.onCreate(savedInstanceState);

????????setContentView(R.layout.activity_wxentry);

????????wxShare =new WXShare(this);

????????wxShare.setListener(new OnResponseListener() {

????????????@Override? ? ? ? ? ??

????????????public void onSuccess() {? ? ? ? ? ??

????????????}

????????????@Override? ? ? ? ? ??

????????????public void onCancel() {? ? ? ? ? ??

????????????}

????????????@Override? ? ? ? ? ??

????????????public void onFail(String message) {? ? ? ? ? ??

????????????}? ? ? ??

????????});

? ? ? ?Log.e("WXEntryActivity","WXEntryActivity");

????????WXShare share =new WXShare(this);

????????api =share.getApi();//? ? ? ??

????????wxShare.share("這是要分享的文字");? ? ? ? ????????wxShare.shareUrl(0,this,"https://open.weixin.qq.com","微信分享","I am so ????????????????crazy","http://avatar.csdn.net/2/C/8/1_small_and_smallworld.jpg");

????????//注意:? ? ? ??

????????// 第三方開發(fā)者如果使用透明界面來實現(xiàn)WXEntryActivity洋魂,? ? ? ?

?????????// 需要判斷handleIntent的返回值,如果返回值為false,? ? ? ??

????????// 則說明入?yún)⒉缓戏ㄎ幢籗DK處理副砍,應(yīng)finish當(dāng)前透明界面衔肢,避? ? ? ??

????????// 免外部通過傳遞非法參數(shù)的Intent導(dǎo)致停留在透明界面,? ? ? ??

????????// 引起用戶的疑惑? ? ? ?

?????????try {

????????????if (!api.handleIntent(getIntent(),this)) {

????????????????finish();? ? ? ? ? ??

????????????}? ? ? ??

????????}catch (Exception e) {

????????????e.printStackTrace();? ? ? ??

????????}? ??

????????}

????????@Override? ??

????????protected void onStart() {

????????????super.onStart();

????????????wxShare.register();? ??

????????}

????????@Override? ??

????????protected void onDestroy() {

????????????wxShare.unregister();

????????????super.onDestroy();? ??

????????}

????????@Override? ??

????????protected void onNewIntent(Intent intent) {

????????????super.onNewIntent(intent);

????????????Log.e("onNewIntent","onNewIntent");

????????????setIntent(intent);

????????????if (!api.handleIntent(intent,this)) {

????????????????finish();? ? ? ??

????????????}? ??

????????}

????????@Override? ??

????????public void onReq(BaseReq baseReq) {

? ? ? ? }

????????@Override? ??

????????public void onResp(BaseResp baseResp) {

????????Intent intent =new Intent(WXShare.ACTION_SHARE_RESPONSE);

????????intent.putExtra(WXShare.EXTRA_RESULT,new ????????????????WXShare.Response(baseResp));sendBroadcast(intent);finish();? ??

????????}

}

在MainActivity中點擊分享的按鈕址晕,直接跳到WXEntryActivity就好了膀懈。

就下來補加一個分享圖片時用到的方法:

private void sharePicture(ShareContent shareContent,int shareType) {

????????Bitmap bitmap =BitmapFactory.decodeResource(mContext.getResources()

????????????,shareContent.getPictureResource());

????WXImageObject imgObj =new WXImageObject(bitmap);

????WXMediaMessage msg =new WXMediaMessage();

????msg.mediaObject =imgObj;

????Bitmap thumbBitmap =Bitmap.createScaledBitmap(bitmap, THUMB_SIZE, ????????????????THUMB_SIZE,true);bitmap.recycle();

????msg.thumbData = Util.bmpToByteArray(thumbBitmap,true);//設(shè)置縮略圖 ? ? ? ????SendMessageToWX.Req req =new SendMessageToWX.Req();

????req.transaction = buildTransaction("imgshareappdata");

????req.message =msg;

????req.scene =shareType;? ??

????mWXApi.sendReq(req);

}

接下來看一下效果圖:

心得

通過這次集成微信分享發(fā)現(xiàn)自己閱讀別人代碼的能力確實還是不夠,以后決定在github上多看一些開源的代碼谨垃,提升自己閱讀代碼的能力启搂,目前定的是兩周看一個,這樣可以為學(xué)習(xí)其他的技術(shù)點和做項目留下一些時間刘陶。

好了大體上就是這樣胳赌,本人小白一枚,千萬不要羨慕俺赘簟R缮弧!纷责!

每天到地鐵站捍掺,早高峰晚高峰那給你擠得那叫一個“舒服”,但是再膳,到了換成站的時候總會看見一句話挺勿,這兩個月總是能看見那句話,我也是用這句話來激勵我自己的喂柒〔黄浚——上天總是會眷顧那些一直默默學(xué)習(xí)的人

You are so crazy,why don`t you study hard???

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市灾杰,隨后出現(xiàn)的幾起案子蚊丐,更是在濱河造成了極大的恐慌,老刑警劉巖艳吠,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件麦备,死亡現(xiàn)場離奇詭異,居然都是意外死亡昭娩,警方通過查閱死者的電腦和手機泥兰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來题禀,“玉大人鞋诗,你說我怎么就攤上這事÷踵冢” “怎么了削彬?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵全庸,是天一觀的道長。 經(jīng)常有香客問我融痛,道長壶笼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任雁刷,我火速辦了婚禮覆劈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘沛励。我一直安慰自己责语,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布目派。 她就那樣靜靜地躺著坤候,像睡著了一般。 火紅的嫁衣襯著肌膚如雪企蹭。 梳的紋絲不亂的頭發(fā)上白筹,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天,我揣著相機與錄音谅摄,去河邊找鬼徒河。 笑死,一個胖子當(dāng)著我的面吹牛送漠,可吹牛的內(nèi)容都是我干的顽照。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼螺男,長吁一口氣:“原來是場噩夢啊……” “哼棒厘!你這毒婦竟也來了纵穿?” 一聲冷哼從身側(cè)響起下隧,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎谓媒,沒想到半個月后淆院,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡句惯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年土辩,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抢野。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡拷淘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出指孤,到底是詐尸還是另有隱情启涯,我是刑警寧澤贬堵,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站结洼,受9級特大地震影響黎做,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜松忍,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一蒸殿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鸣峭,春花似錦宏所、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至更扁,卻和暖如春盖腕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背浓镜。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工溃列, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人膛薛。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓听隐,卻偏偏與公主長得像,于是被迫代替她去往敵國和親哄啄。 傳聞我的和親對象是個殘疾皇子雅任,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容