• QQ

    • 下载sdk并运行demo
    • 各种配置
    • IUiListener
    • 分享图片
      • 分享到QQ
      • 分享到QZONE
  • Sina微博
    • 配置
    • 选择集成sdk方式
    • 分享图片
  • 微信
    • 朋友
    • 朋友圈

现在项目中用个第三方登录,或分享已经不是什么稀奇事了,但是要想把这个功能做好,那可就不容易了。估计到这里就有人会说了,扯犊子,这玩意,我用第三方sdk,什么umeng,sharesdk分分钟给你做出来,可是这些第三方sdk只有对项目的分享要求不高的时候才适合,如果要定制分享,那我就只能呵呵。虽然第三方登录或分享没什么技术难度,但是各种配置,而且每一个都不太一样,少配置一个地方代码就通不过了,所以基于上问题,特写此文以备不时之需。

好,上面扯太多了,现在正式上代码,我们先从QQ入手,你问为什么,因为他最简单呀

QQ

下载sdk并运行demo

首先不得不吐槽一个问题,就是腾讯的文档是最全的,全的你都找不到在哪里,点击这里可以查看官方文档这里下载官方demo下载

另外,由于官方文档太难找了,特上此图

首先下载sdk,我下载的版本是Android_SDK_V2.9.4,解压后目录如图所示

其他jar目录下面是需要添加你的项目依赖中去的jar包,sample就是顾名思义啦,可以直接将他导入eclipse,并更编码为utf-8,不过当前版本的demo配置有点问题,导入完成后会有如下错误

不过别急,我们程序员最擅长解决这种问了,再说有什么问题能难倒我聪明的程序员呢

首先我们可以随便打开一个文件,可以查看到时找不到这样的包com.tencent.tauth.IRequestListener,这我们第一反应肯定是,没有加入依赖包,卧槽,真聪明,恭喜你答对了,呵呵~

既然这样那问题就简单了,直接拷贝jar目录下面jar包放到libs,并add path(如果需要),这下整个世界都清净了,错误统统滚开了,现在就可以运行看看效果

各种配置

配置权限

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- SDK2.1新增获取用户位置信息 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<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.GET_TASKS"/>

配置activity

<activity
    android:name="com.tencent.tauth.AuthActivity"android:launchMode="singleTask"android:noHistory="true" ><intent-filter><action android:name="android.intent.action.VIEW" /><category android:name="android.intent.category.DEFAULT" /><category android:name="android.intent.category.BROWSABLE" /><!-- 这地方的123456需要用你在开放平台申请的appid替换 --><data android:scheme="tencent123456" /></intent-filter>
</activity><activity
    android:name="com.tencent.connect.common.AssistActivity"android:configChanges="orientation|keyboardHidden"android:screenOrientation="behind"android:theme="@android:style/Theme.Translucent.NoTitleBar" />

到这里我们的清单文件和activity都配置完了,接下来我要实例化Tencent类,所有的操作都是通过他来的,查看demo这个类的实例化是在MainActivity#onCreate方法中,并弄成了单例

public static Tencent mTencent;if (mTencent == null) {mTencent = Tencent.createInstance(mAppid, this);
}

IUiListener

现在我们需要在分享或登录的过程中拿到一些状态,就需要用到IUiListener,调用SDK已经封装好的接口时,例如:登录、快速支付登录、应用分享、应用邀请等接口,需传入该回调的实例。

IUiListener qqShareListener = new IUiListener() {@Overridepublic void onCancel() {if (shareType != QQShare.SHARE_TO_QQ_TYPE_IMAGE) {Util.toastMessage(QQShareActivity.this, "onCancel: ");}}@Overridepublic void onComplete(Object response) {// TODO Auto-generated method stubUtil.toastMessage(QQShareActivity.this, "onComplete: " + response.toString());}@Overridepublic void onError(UiError e) {// TODO Auto-generated method stubUtil.toastMessage(QQShareActivity.this, "onError: " + e.errorMessage, "e");}
};//如果要收到QQ分享,或登录的一些状态,必须加入代码
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {Tencent.onActivityResultData(requestCode,resultCode,data,listener);
}

分享图片

我这只贴我们今天用到的代码,其他的大家可以直接在demo里面复制,本文主要内容是,记录一些配置,而并不是贴代码

分享到QQ

public void shareOnlyImageOnQQ(View view) {final Bundle params = new Bundle();params.putString(QQShare.SHARE_TO_QQ_IMAGE_LOCAL_URL, Environment.getExternalStorageDirectory().getAbsolutePath().concat("/a.png"));params.putString(QQShare.SHARE_TO_QQ_APP_NAME, "测试应用");params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_IMAGE);
//        params.putInt(QQShare.SHARE_TO_QQ_EXT_INT, QQShare.SHARE_TO_QQ_FLAG_QZONE_AUTO_OPEN); //打开这句话,可以实现分享纯图到QQ空间doShareToQQ(params);
}private void doShareToQQ(final Bundle params) {// QQ分享要在主线程做ThreadManager.getMainHandler().post(new Runnable() {@Overridepublic void run() {if (null != mTencent) {mTencent.shareToQQ(QQActivity.this, params, qqShareListener);}}});
}

分享到QZONE

截止到2016-4-8,QZONE暂不支持纯图片分享,官网文档这里也有说。但是我们可以通过分享到QQ时设置一个参数,就可以直接分享纯图到QQ空间了

public void shareOnlyImageOnQZone(View view) {final Bundle params = new Bundle();//本地地址一定要传sdcard路径,不要什么getCacheDir()或getFilesDir()params.putString(QQShare.SHARE_TO_QQ_IMAGE_LOCAL_URL, Environment.getExternalStorageDirectory().getAbsolutePath().concat("/a.png"));params.putString(QQShare.SHARE_TO_QQ_APP_NAME, "测试应用");params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_IMAGE);params.putInt(QQShare.SHARE_TO_QQ_EXT_INT, QQShare.SHARE_TO_QQ_FLAG_QZONE_AUTO_OPEN); //打开这句话,可以实现分享纯图到QQ空间doShareToQQ(params);
}

注意:这里有个很重要的就是,分享本地图片时路径一定不要传getCacheDir()或getFilesDir()等。不要问我为什么,因为你既然是分享图片到QQ,他要帮我显示,但你给他一个私有目录,他肯定不能显示,那种重点来了,这就到导致很多朋友在做分享时,分享的图片不能显示得原因了。别我是怎么知道的,我说我猜的,你信么~~

QQ实例完整代码,因为肯定问了,既然上面贴了部分代码,为啥下面还要全贴处理,这你就不懂了吧,上面我只贴了部分,但是他们没多大的关联性,可能不太好理解,而我希望的就是,大家一看看就明白了,不需要再下载demo再在手机上跑一遍,就能解决问题,效果才是王道

package cn.woblog.testthirdpartyfunction.activity;import android.content.Intent;
import android.os.Bundle;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.view.View;import com.tencent.connect.share.QQShare;
import com.tencent.open.utils.ThreadManager;
import com.tencent.tauth.IUiListener;
import com.tencent.tauth.Tencent;
import com.tencent.tauth.UiError;import cn.woblog.testthirdpartyfunction.R;
import cn.woblog.testthirdpartyfunction.Util;public class QQActivity extends AppCompatActivity {public static Tencent mTencent;private static final String mAppid = "1105245621";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_qq);if (mTencent == null) {mTencent = Tencent.createInstance(mAppid, this);}}public void shareOnlyImageOnQZone(View view) {final Bundle params = new Bundle();//本地地址一定要传sdcard路径,不要什么getCacheDir()或getFilesDir()params.putString(QQShare.SHARE_TO_QQ_IMAGE_LOCAL_URL, Environment.getExternalStorageDirectory().getAbsolutePath().concat("/a.png"));params.putString(QQShare.SHARE_TO_QQ_APP_NAME, "测试应用");params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_IMAGE);params.putInt(QQShare.SHARE_TO_QQ_EXT_INT, QQShare.SHARE_TO_QQ_FLAG_QZONE_AUTO_OPEN); //打开这句话,可以实现分享纯图到QQ空间doShareToQQ(params);}public void shareOnlyImageOnQQ(View view) {final Bundle params = new Bundle();params.putString(QQShare.SHARE_TO_QQ_IMAGE_LOCAL_URL, Environment.getExternalStorageDirectory().getAbsolutePath().concat("/a.png"));params.putString(QQShare.SHARE_TO_QQ_APP_NAME, "测试应用");params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_IMAGE);
//        params.putInt(QQShare.SHARE_TO_QQ_EXT_INT, QQShare.SHARE_TO_QQ_FLAG_QZONE_AUTO_OPEN); //打开这句话,可以实现分享纯图到QQ空间doShareToQQ(params);}private void doShareToQQ(final Bundle params) {// QQ分享要在主线程做ThreadManager.getMainHandler().post(new Runnable() {@Overridepublic void run() {if (null != mTencent) {mTencent.shareToQQ(QQActivity.this, params, qqShareListener);}}});}IUiListener qqShareListener = new IUiListener() {@Overridepublic void onCancel() {Util.toastMessage(QQActivity.this, "onCancel: ");}@Overridepublic void onComplete(Object response) {// TODO Auto-generated method stubUtil.toastMessage(QQActivity.this, "onComplete: " + response.toString());}@Overridepublic void onError(UiError e) {// TODO Auto-generated method stubUtil.toastMessage(QQActivity.this, "onError: " + e.errorMessage, "e");}};@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {Tencent.onActivityResultData(requestCode, resultCode, data, qqShareListener);}
}

Sina(微博)

我们到官方文档下载相应的官方demo并且多看看项目的ReadeMe,写的很详细让你少走弯路。解压后项目结构如图所示:

如果是第一次集成,我们可以直接运行WeiboSDKDemo_v3.1.4.apk先查看效果,这样也方便你对他的功能和效果有一个大概了解,当如也可以直接导入demo-src目录下面的代码,

通过这种方式运行工程时,请务必替换默认的 debug.keystore文件,否则无法正确的授权成功。另外,该debug.keysotre 是新浪官方的,除了编译运行官方 DEMO 外,请不要直接使用它,出于安全的考虑,您应该为自己的应用提供一份 keysotre。

在C:\Users\XXXXX.android目录下,把Android默认的debug.keystore替换成当前微博demo里面提供debug.keystore。

配置

在集成微博前,需要到新浪微博官网创建一个应用,在控制台-基本信息菜单里面填上包名和签名,签名通过签名工具获取工具这里获取

配置权限,如果已经添加了相应的权限,就不要重复添加了

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

配置返回微博的activity

在进行微博分享前,需要在AndroidManifest.xml中,在需要接收消息的Activity(唤起微博主程序的类)里声明对应的Action:ACTION_SDK_REQ_ACTIVITY,如下所示:

<!--sina-->
<activity android:name="com.sina.weibo.sdk.component.WeiboSdkBrowser"android:configChanges="keyboardHidden|orientation"android:windowSoftInputMode="adjustResize"android:exported="false" >
</activity>
<service android:name="com.sina.weibo.sdk.net.DownloadService"android:exported="false">
</service><!--\sina--><activity android:name=".activity.QQActivity">
</activity>
<activity android:name=".activity.SinaActivity"><!-- 调用新浪原生SDK,需要注册的回调activity --><intent-filter><action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" /><category android:name="android.intent.category.DEFAULT" /></intent-filter>
</activity>

选择集成sdk方式

在集成微博SDK前,有两种方式来集成微博SDK:

  • 直接导入weibosdkcore.jar:适用于只需要授权、分享、网络请求框架功能的项目
  • 引用WeiboSDK工程(Library):适用于微博授权、分享,以及需要登陆按钮、调用OpenAPI的项目

在这里我采用方式1,因为我不需要登录按钮和直接调用OpenAPI

分享图片

WeiboMessage weiboMessage = new WeiboMessage();
ImageObject imageObject = new ImageObject();
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
imageObject.setImageObject(bitmap);
weiboMessage.mediaObject = imageObject;
SendMessageToWeiboRequest request = new SendMessageToWeiboRequest();
request.transaction = String.valueOf(System.currentTimeMillis());
request.message = weiboMessage;
mWeiboShareAPI.sendRequest(SinaActivity.this, request);

如果配置没问题的话,到这一步已经是可以分享得了,如果遇到什么问题,请在下方评论,我一定会回复的

package cn.woblog.testthirdpartyfunction.activity;import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Toast;import com.sina.weibo.sdk.api.ImageObject;
import com.sina.weibo.sdk.api.WeiboMessage;
import com.sina.weibo.sdk.api.share.BaseResponse;
import com.sina.weibo.sdk.api.share.IWeiboHandler;
import com.sina.weibo.sdk.api.share.IWeiboShareAPI;
import com.sina.weibo.sdk.api.share.SendMessageToWeiboRequest;
import com.sina.weibo.sdk.api.share.WeiboShareSDK;
import com.sina.weibo.sdk.constant.WBConstants;import cn.woblog.testthirdpartyfunction.Constants;
import cn.woblog.testthirdpartyfunction.R;public class SinaActivity extends AppCompatActivity implements IWeiboHandler.Response {private IWeiboShareAPI mWeiboShareAPI;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_sina);// 创建微博分享接口实例mWeiboShareAPI = WeiboShareSDK.createWeiboAPI(this, Constants.APP_KEY);// 注册第三方应用到微博客户端中,注册成功后该应用将显示在微博的应用列表中。// 但该附件栏集成分享权限需要合作申请,详情请查看 Demo 提示// NOTE:请务必提前注册,即界面初始化的时候或是应用程序初始化时,进行注册mWeiboShareAPI.registerApp();// 当 Activity 被重新初始化时(该 Activity 处于后台时,可能会由于内存不足被杀掉了),// 需要调用 {@link IWeiboShareAPI#handleWeiboResponse} 来接收微博客户端返回的数据。// 执行成功,返回 true,并调用 {@link IWeiboHandler.Response#onResponse};// 失败返回 false,不调用上述回调if (savedInstanceState != null) {mWeiboShareAPI.handleWeiboResponse(getIntent(), this);}}public void testShareImage(View view) {WeiboMessage weiboMessage = new WeiboMessage();ImageObject imageObject = new ImageObject();Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);imageObject.setImageObject(bitmap);weiboMessage.mediaObject = imageObject;SendMessageToWeiboRequest request = new SendMessageToWeiboRequest();request.transaction = String.valueOf(System.currentTimeMillis());request.message = weiboMessage;mWeiboShareAPI.sendRequest(SinaActivity.this, request);}@Overrideprotected void onNewIntent(Intent intent) {super.onNewIntent(intent);// 从当前应用唤起微博并进行分享后,返回到当前应用时,需要在此处调用该函数// 来接收微博客户端返回的数据;执行成功,返回 true,并调用// {@link IWeiboHandler.Response#onResponse};失败返回 false,不调用上述回调mWeiboShareAPI.handleWeiboResponse(intent, this);}/*** 接收微客户端博请求的数据。* 当微博客户端唤起当前应用并进行分享时,该方法被调用。** @param baseResp 微博请求数据对象* @see {@link IWeiboShareAPI#handleWeiboRequest}*/@Overridepublic void onResponse(BaseResponse baseResp) {if (baseResp != null) {switch (baseResp.errCode) {case WBConstants.ErrorCode.ERR_OK:Toast.makeText(this, "success", Toast.LENGTH_LONG).show();break;case WBConstants.ErrorCode.ERR_CANCEL:Toast.makeText(this, "cancel", Toast.LENGTH_LONG).show();break;case WBConstants.ErrorCode.ERR_FAIL:Toast.makeText(this, "Error Message: " + baseResp.errMsg,Toast.LENGTH_LONG).show();break;}}}
}

微信

说道微信又不得不吐槽了,要想获得微信登录,还得是企业账户才能申请,还得交钱,你说这叫什么事

首先我打开微信开发者官网,注册个账号或者用已有的账号登录,在管理中心创建应用并提交审核,审完完成如下图。

可以看到我们已经获得,分享到朋友圈或朋友的权限,微信登录等还需要申请,那我现在只有先测试分享了

首先我们来到开发者官网文档下载相应的sdk和开发文档

这其中我只下载了如下sdk

第一个是:获取签名的,不过我感觉不太好用,因为他没有复制签名的按钮,每次还得照着一个一个打出来,我推荐用微博的签名工具

第二个是:使用微信分享、登录、收藏、支付等功能需要的库以及文件

第三个是:范例代码,包含了一个完整的范例工程。该范例的使用可以参阅Android平台上手指南

首先我们用eclipse导入示例代码,替换当前目录下的keystore,然后运行就可以查看相关示例

下面我们就应该来安装官方文档来集成sdk了

首先在官网创建一个应用,获取到AppId,然后把刚刚下载的sdk包里面的libammsdk.jar拷贝到你的项目libs目录下,并添加到path(如果需要)

配置权限:

说到这里,有的吐槽了,你看看这个排版,简直是差评

在看看我们下面的代码,这排版,这样是,一看就是很帅的人写的~~

<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"/>

配置activity

由于我们要接受微信分享的一些信息,比如:分享成功或失败

这一步很重要,配置错误将收不到消息,在你的包名根目录下创建wxapi包,然后在该包下创建activity命名为WXEntryActivity并实现IWXAPIEventHandler接口,基本代码如下:

package cn.woblog.testthirdpartyfunction.wxapi;import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;import com.tencent.mm.sdk.openapi.BaseReq;
import com.tencent.mm.sdk.openapi.BaseResp;
import com.tencent.mm.sdk.openapi.IWXAPIEventHandler;import cn.woblog.testthirdpartyfunction.R;public class WXEntryActivity extends AppCompatActivity implements IWXAPIEventHandler {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_wxentry);}// 微信发送请求到第三方应用时,会回调到该方法@Overridepublic void onReq(BaseReq baseReq) {}// 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法@Overridepublic void onResp(BaseResp baseResp) {}
}

载清单文件里配置你的activity

<activity android:name=".wxapi.WXEntryActivity" android:exported="true">
</activity>

创建实例,并注册到微信

“`java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_wxentry);

//如果分享的时候,该界面没有开启,那么微信开始这个activity时,会调用onCreate,所以这里要处理微信的返回结果
WxActivity.api.handleIntent(getIntent(), this);

}

@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
//如果分享的时候,该已经开启,那么微信开始这个activity时,会调用onNewIntent,所以这里要处理微信的返回结果
setIntent(intent);
WxActivity.api.handleIntent(intent, this);
}


## 分享图片```java
/*** @param isShareFriend true 分享到朋友,false分享到朋友圈*/
private void share2Wx(boolean isShareFriend) {Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);WXImageObject imgObj = new WXImageObject(bitmap);WXMediaMessage msg = new WXMediaMessage();msg.mediaObject = imgObj;Bitmap thumbBmp = Bitmap.createScaledBitmap(bitmap, THUMB_SIZE, THUMB_SIZE, true);//缩略图大小bitmap.recycle();msg.thumbData = Util.bmpToByteArray(thumbBmp, true);  // 设置缩略图SendMessageToWX.Req req = new SendMessageToWX.Req();req.transaction = buildTransaction("img");req.message = msg;req.scene = isShareFriend ? SendMessageToWX.Req.WXSceneSession : SendMessageToWX.Req.WXSceneTimeline;api.sendReq(req);
}<div class="se-preview-section-delimiter"></div>

朋友

这里就简单了,直接调用上面的方法
share2Wx(true);

朋友圈

share2Wx(false);<div class="se-preview-section-delimiter"></div>

这里是这个分享的完整代码

package cn.woblog.testthirdpartyfunction.activity;import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;import com.tencent.mm.sdk.openapi.IWXAPI;
import com.tencent.mm.sdk.openapi.SendMessageToWX;
import com.tencent.mm.sdk.openapi.WXAPIFactory;
import com.tencent.mm.sdk.openapi.WXImageObject;
import com.tencent.mm.sdk.openapi.WXMediaMessage;
import com.tencent.mm.sdk.platformtools.Util;import cn.woblog.testthirdpartyfunction.Constants;
import cn.woblog.testthirdpartyfunction.R;public class WxActivity extends AppCompatActivity {private static final int THUMB_SIZE = 150;public static IWXAPI api;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_wx);// 通过WXAPIFactory工厂,获取IWXAPI的实例api = WXAPIFactory.createWXAPI(this, Constants.WX_APP_ID, false);// 将该app注册到微信api.registerApp(Constants.WX_APP_ID);}/*** 分享一张图片到朋友** @param view*/public void testShareImage2friend(View view) {share2Wx(true);}/*** 分享一张图片到朋友圈** @param view*/public void testShareImage2friends(View view) {share2Wx(false);}/*** @param isShareFriend true 分享到朋友,false分享到朋友圈*/private void share2Wx(boolean isShareFriend) {Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);WXImageObject imgObj = new WXImageObject(bitmap);WXMediaMessage msg = new WXMediaMessage();msg.mediaObject = imgObj;Bitmap thumbBmp = Bitmap.createScaledBitmap(bitmap, THUMB_SIZE, THUMB_SIZE, true);//缩略图大小bitmap.recycle();msg.thumbData = Util.bmpToByteArray(thumbBmp, true);  // 设置缩略图SendMessageToWX.Req req = new SendMessageToWX.Req();req.transaction = buildTransaction("img");req.message = msg;req.scene = isShareFriend ? SendMessageToWX.Req.WXSceneSession : SendMessageToWX.Req.WXSceneTimeline;api.sendReq(req);}private String buildTransaction(final String type) {return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis();}
}

另外说点题外话,鉴于我是有点强迫症的人,所以在代码以及文字的组织和代码的格式化都保持良好的风格,特别是代码的格式,我都是每次先自己写一遍,然后在从开发工具里拷贝出来,有时还得按tad一点一点点缩进(如果哪位大神有更好的方法,希望指教下),才贴到这上面了,以为我觉得既然要写博客就要写好,这要才对别人有帮助,在我觉得如果文字排版或者代码格式乱乱的,就是耍流氓。

以上测试的代码我放到github了,有什么问题可以直接评论或者在github上创建issure

如果我的文章对来带来的帮助,可加我微信,微博,QQ什么啥的交个朋友也是不错的,另外微信,微博都会不定期发一些优质的文章,感谢大家的支持~~

史上最详细Android集成QQ,微信,微博分享(不用第三方)持续更新中相关推荐

  1. android qq分享自动弹出,史上最详细Android集成QQ,微信,微博分享(不要第三方)持续更新中...

    QQ1 下载sdk并运行demo 2 各种配置 IUiListener 4 分享图片41 分享到QQ 41 分享到QZONE Sina微博配置 选择集成sdk方式 分享图片 现在项目中用个第三方登录, ...

  2. 史上最具体Android集成QQ,微信,微博分享(不用第三方)持续更新中

    QQ 下载sdk并执行demo 各种配置 IUiListener 分享图片 分享到QQ 分享到QZONE Sina微博 配置 选择集成sdk方式 分享图片 微信 朋友 朋友圈 如今项目中用个第三方登录 ...

  3. Android 高仿App项目归纳整理,持续更新中…

    Android 高仿App项目归纳整理,持续更新中- Android高仿App项目整理,包含高仿了一些大公司的app,有基于Java,Kotlin,Flutter等语言的.对于开发我们自已的项目时可以 ...

  4. 最实用的微信小程序大全,持续更新中...

    最全的小程序开发教程,点击下载掘金App. 小程序上线 1月9日,张小龙没有食言,微信小程序如约而至.凌晨刚过,我们便在微信发现页看到了小程序的入口. 微信发现页 之后的一个小时里,每个微信群都在疯狂 ...

  5. Android开源项目以及开源库集合(持续更新中)

    UI Awesome-MaterialDesign – MaterialDesignCenter改名为Awesome-MaterialDesign,优化了布局,新增了不少库. awesome-andr ...

  6. Android Performance Patterns 系列视频学习记录(持续更新中)

    系列文章旨在记录YouTube上谷歌发布的Android Performance Patterns系列视频,一共79个视频,每个视频也就几分钟.当然对于大部分安卓开发者来说,这些都是基础,可能你会说, ...

  7. Android面试计网面经大全【持续更新中。。。】

    前言 本篇文章为本人面试以及空闲时间整理的计网面试常见问题.供本人复习之用.分享给大家.大家可以评论补充哦! 因为面试常见问题一般都是网络层,传输层以及应用层.所以我就按自上而下的顺序,来分享 最后一 ...

  8. 史上最详细域名链接被微信封杀拦截屏蔽解决方案_微信域名防封跳转系统

    想通过活动营销来推广产品的用户,肯定经常遇到域名被微信封杀拦截屏蔽的情况,想申请恢复访问过程复杂,而且由个人或小团队经营的网站基本只能放弃,花钱解封价格昂贵,遇到恶意举报还是一样被封,如此循环带来的损 ...

  9. 史上最详细的RocketMq 下单支付案例 分享

    1. 案例介绍 1.1 业务分析 模拟电商网站购物场景中的[下单]和[支付]业务 1)下单 用户请求订单系统下单 订单系统通过RPC调用订单服务下单 订单服务调用优惠券服务,扣减优惠券 订单服务调用调 ...

最新文章

  1. mysql数据库中nchar_MySQL数据库中CHAR与VARCHAR之争
  2. python utf8_肿么在Python里使用UTF-8编码
  3. C# 控件缩写大全+命名规范+示例
  4. 直播预告 | 第四范式2021发布会技术分论坛报名开启,6月23日线上见
  5. python 去除列表空值_零基础学习Python之9大关键概念
  6. Android官方开发文档Training系列课程中文版:分享简单数据之从其它APP接收简单数据
  7. Google 网站品质指南
  8. 程序员正在抛弃 Facebook
  9. 中文拼写纠错_58搜索拼写纠错
  10. 【Python-2.7】列表与元组
  11. 极域课堂管理系统软件如何取消控制_青岛海运职业学校智能用电管理平台系统建设项目完成验收...
  12. 行业分析| 物流对讲
  13. 爬虫必备,案例对比 Requests、Selenium、Scrapy 爬虫库!
  14. Javase day06_汇总
  15. fliebeat+kafka ELK日志分析平台实战
  16. 【211】win10快捷键大全
  17. NFT火力暂停,休息一下?
  18. win7系统下连网络打印机打印反应很慢解决方法
  19. iOS—网络实用技术OC篇网络爬虫-使用java语言抓取网络数据
  20. Jquery找父元素,祖先,子元素,子孙,兄弟节点

热门文章

  1. 榛子树搜索算法(Hazelnut tree search algorithm,HTS)——一种高效的优化算法
  2. Vue 项目优化图片
  3. http://www.xueh188.top/index.php/archives/37/
  4. ztree配置async异步加载子节点,展开不触发请求的问题解决记录
  5. 程序性能优化探讨(6)——矩阵乘法优化之分块矩阵
  6. 第三周项目10-小学生计算题的随机生成
  7. 基于Python的大数据分析基础(九)--- 数据分析
  8. 大数据前景毋庸置疑 零基础小白要学习什么
  9. 【服务器数据恢复】多次断电导致服务器RAID模块损坏的数据恢复案例
  10. vb的学习心得-for循环