android 分享功能

來源:互聯網
上載者:User

標籤:android      qq   新浪微博   分享   

       上一篇講了android第三方登入,這一篇大概說一下分享。需要注意幾點: 

1.登入和分享功能都必須是簽名之後的apk,才能用 

2.再吐槽一下,SDK做的真他媽的變態,和登入一樣,必須是例如我的apk,包名(也就是AndroidManifest.xml中的包名)是com.kingdowin.gosu,你項目中必須有一個包名是com.kingdowin.gosu.wxapi,下面有一個類是WXEntryActivity.java,裡面寫登入或分享以及獲得返迴響應結果(public void onResp(BaseResp resp) {})代碼,我不得不把自己的MainActivity改為WXEntryActivity。否則就擷取不到使用者資訊,記好是必須

3.分享是文本能分享而圖片不能,那是因為你分享的圖片太大了,SDK協議中對縮圖的大小作了限制,大小不能超過32K。另外限制的還有title、description等參數的長度。另外Bitmap的compress方法不支援PNG,只支援JPG。

4.qq分享如果包含圖片似乎只支援手機裡的本地圖片而不支援二進位


分享代碼:

<pre name="code" class="html">public class WXEntryActivity extends Activity implements OnClickListener,IWXAPIEventHandler {private IWXAPI api;api = WXAPIFactory.createWXAPI(this, Constant.WEIXIN_APP_ID, false);api.handleIntent(getIntent(), this);protected void onNewIntent(Intent intent) {super.onNewIntent(intent);setIntent(intent);api.handleIntent(intent, this);}@Overridepublic void onReq(BaseReq req) {switch (req.getType()) {case ConstantsAPI.COMMAND_GETMESSAGE_FROM_WX:break;case ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX:break;default:break;}}@Overridepublic void onResp(BaseResp resp) {switch (resp.errCode) {case BaseResp.ErrCode.ERR_OK:if (MyApplication.loginShare.equals("login")) {String code = ((SendAuth.Resp) resp).code;new WeiXinLogin(this).getWeiXinInfo(code);Toast.makeText(this, R.string.auth_success, Toast.LENGTH_SHORT).show();}else{Toast.makeText(this, R.string.share_success, Toast.LENGTH_SHORT).show();}break;case BaseResp.ErrCode.ERR_USER_CANCEL:if (MyApplication.loginShare.equals("login")) {Toast.makeText(this, R.string.auth_cancel, Toast.LENGTH_SHORT).show();}else{Toast.makeText(this, R.string.share_cancel, Toast.LENGTH_SHORT).show();}break;case BaseResp.ErrCode.ERR_AUTH_DENIED:if (MyApplication.loginShare.equals("login")) {Toast.makeText(this, R.string.auth_failure, Toast.LENGTH_SHORT).show();}else{Toast.makeText(this, R.string.share_failure, Toast.LENGTH_SHORT).show();}break;default:break;}}}public class WeiXinShare{private Activity context;private IWXAPI api;private static final int THUMB_SIZE = 150;public WeiXinShare(Activity context){this.context=context;api = WXAPIFactory.createWXAPI(context, Constant.WEIXIN_APP_ID);api.registerApp(Constant.WEIXIN_APP_ID);}public void shareText(int flag){WXTextObject textObj = new WXTextObject();textObj.text = context.getString(R.string.app_share_content);// ??WXTextObject???????????WXMediaMessage????WXMediaMessage msg = new WXMediaMessage();msg.mediaObject = textObj;// ??????????????????title??β???????// msg.title = "Will be ignored";msg.description =context.getString(R.string.app_share_content);// ???????ReqSendMessageToWX.Req req = new SendMessageToWX.Req();req.transaction = buildTransaction("text"); // transaction???????Ψ???????????req.message = msg;req.scene =flag;api.sendReq(req);}// ????api??????????????public void shareImg(int flag){Bitmap bmp = BitmapFactory.decodeResource(context.getResources(), R.drawable.app_icon);WXImageObject imgObj = new WXImageObject(bmp);WXMediaMessage msg = new WXMediaMessage();msg.mediaObject = imgObj;Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, THUMB_SIZE, THUMB_SIZE, true);bmp.recycle();msg.thumbData = Util.bmpToByteArray(thumbBmp, true);  // ?????????SendMessageToWX.Req req = new SendMessageToWX.Req();req.transaction =buildTransaction("img");req.message = msg;req.scene =flag;api.sendReq(req);//context.finish();}private String buildTransaction(final String type) {return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis();}public void shareWebToFriend(String shareContext,String url){WXWebpageObject webpage = new WXWebpageObject();webpage.webpageUrl = url;WXMediaMessage msg = new WXMediaMessage(webpage);msg.title =context.getString(R.string.app_gosu);msg.description =shareContext;Bitmap thumb = BitmapFactory.decodeResource(context.getResources(), R.drawable.app_icon);msg.thumbData = Util.bmpToByteArray(thumb, true);SendMessageToWX.Req req = new SendMessageToWX.Req();req.transaction = buildTransaction("webpage");req.message = msg;req.scene = 0;api.sendReq(req);}public void shareWebToZone(String shareContext,String url){WXWebpageObject webpage = new WXWebpageObject();webpage.webpageUrl =url ;WXMediaMessage msg = new WXMediaMessage(webpage);msg.title =shareContext;Bitmap thumb = BitmapFactory.decodeResource(context.getResources(), R.drawable.app_icon);msg.thumbData = Util.bmpToByteArray(thumb, true);SendMessageToWX.Req req = new SendMessageToWX.Req();req.transaction = buildTransaction("webpage");req.message = msg;req.scene = 1;api.sendReq(req);}}


qq分享代碼:

public class QShare {private Context context;public static Tencent mTencent;private String fileUrl;private int mExtarFlag = 0x00;public QShare(Context context) {this.context = context;if (mTencent == null) {mTencent = Tencent.createInstance(Constant.QQ_APP_ID, context);}fileUrl=MyApplication.photo_path+"app_icon.png";}public void shareToQ(String shareContent,String url) {final Bundle params = new Bundle();params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE,QQShare.SHARE_TO_QQ_TYPE_DEFAULT);params.putString(QQShare.SHARE_TO_QQ_TITLE, context.getString(R.string.app_gosu));params.putString(QQShare.SHARE_TO_QQ_SUMMARY,shareContent);params.putString(QQShare.SHARE_TO_QQ_IMAGE_LOCAL_URL, fileUrl);params.putString(QQShare.SHARE_TO_QQ_TARGET_URL,url);mTencent.shareToQQ((Activity) context, params, qqShareListener);}public void shareToQZone(String shareContent,String url) {final Bundle params = new Bundle();params.putString(QQShare.SHARE_TO_QQ_TITLE, context.getString(R.string.app_gosu));params.putString(QQShare.SHARE_TO_QQ_SUMMARY, shareContent);params.putString(QQShare.SHARE_TO_QQ_IMAGE_LOCAL_URL, fileUrl);params.putString(QQShare.SHARE_TO_QQ_TARGET_URL,url);params.putInt(QQShare.SHARE_TO_QQ_EXT_INT, mExtarFlag|= QQShare.SHARE_TO_QQ_FLAG_QZONE_AUTO_OPEN);mTencent.shareToQQ((Activity) context, params, qqShareListener);}IUiListener qqShareListener = new IUiListener() {@Overridepublic void onCancel() {Toast.makeText(context,context.getString(R.string.share_cancel),Toast.LENGTH_LONG);}@Overridepublic void onComplete(Object response) {// TODO Auto-generated method stubToast.makeText(context,context.getString(R.string.share_success),Toast.LENGTH_LONG);}@Overridepublic void onError(UiError e) {// TODO Auto-generated method stubToast.makeText(context,context.getString(R.string.share_failure),Toast.LENGTH_LONG);}};}

微博分享代碼:
public class WeiBoShare implements IWeiboHandler.Response {private IWeiboShareAPI mWeiboShareAPI;private Context context;public WeiBoShare(Context context) {this.context = context;mWeiboShareAPI = WeiboShareSDK.createWeiboAPI(context,Constant.WEIBO_APP_KEY);mWeiboShareAPI.registerApp();}public void share(String shareContent) {WeiboMultiMessage weiboMessage = new WeiboMultiMessage();TextObject textObject = new TextObject();textObject.text = shareContent;weiboMessage.textObject = textObject;weiboMessage.imageObject = getImageObj();// weiboMessage.mediaObject = getWebpageObj();SendMultiMessageToWeiboRequest request = new SendMultiMessageToWeiboRequest();// 鐢╰ransaction鍞竴鏍囪瘑涓?涓姹?request.transaction = String.valueOf(System.currentTimeMillis());request.multiMessage = weiboMessage;AuthInfo authInfo = new AuthInfo(context, Constant.WEIBO_APP_KEY,Constant.REDIRECT_URL, Constant.SCOPE);Oauth2AccessToken accessToken = AccessTokenKeeper.readAccessToken(context);Log.d("gaolei", "authInfo--------------" + authInfo);Log.d("gaolei", "accessToken--------------" + accessToken);String token = "";if (accessToken != null) {token = accessToken.getToken();}mWeiboShareAPI.sendRequest((Activity) context, request, authInfo,token, new WeiboAuthListener() {@Overridepublic void onWeiboException(WeiboException e) {Log.d("gaolei","onWeiboException--------------"+ e.getMessage());}@Overridepublic void onComplete(Bundle bundle) {// TODO Auto-generated method stubOauth2AccessToken newToken = Oauth2AccessToken.parseAccessToken(bundle);AccessTokenKeeper.writeAccessToken(context, newToken);Toast.makeText(context,"onAuthorizeComplete token = "+ newToken.getToken(), 0).show();}@Overridepublic void onCancel() {}});}//private TextObject getTextObj() {//TextObject textObject = new TextObject();//textObject.text = context.getString(R.string.app_share_content);//return textObject;//}private ImageObject getImageObj() {ImageObject imageObject = new ImageObject();BitmapDrawable bitmapDrawable = (BitmapDrawable) context.getResources().getDrawable(R.drawable.app_icon);imageObject.setImageObject(bitmapDrawable.getBitmap());return imageObject;}private WebpageObject getWebpageObj() {WebpageObject mediaObject = new WebpageObject();mediaObject.identify = Utility.generateGUID();mediaObject.title = context.getString(R.string.share_gosu);mediaObject.description = context.getString(R.string.app_share_content);// 璁劇疆 Bitmap 綾誨瀷鐨勫浘鐗囧埌瑙嗛瀵矽薄閲?mediaObject.setThumbImage(BitmapFactory.decodeResource(context.getResources(), R.drawable.app_icon));mediaObject.actionUrl = "http://www.kingdowin.com/";mediaObject.defaultText = context.getString(R.string.share_gosu);return mediaObject;}@Overridepublic void onResponse(BaseResponse baseResp) {// TODO Auto-generated method stubswitch (baseResp.errCode) {case WBConstants.ErrorCode.ERR_OK:Toast.makeText(context,context.getString(R.string.share_success),Toast.LENGTH_LONG);break;case WBConstants.ErrorCode.ERR_CANCEL:Toast.makeText(context,context.getString(R.string.share_cancel),Toast.LENGTH_LONG);break;case WBConstants.ErrorCode.ERR_FAIL:Toast.makeText(context,context.getString(R.string.share_failure),Toast.LENGTH_LONG);break;}}}
                                           

                                 項目源碼現在地址,歡迎光臨................................
                                                      

android 分享功能

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.