科技快訊
?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???