Android 快捷分享
注意:
本文介绍的是调用ShareSDK快捷分享(有界面)的方法实现分享功能。如果您想查询ShareSDK内置(无界面)的分享方法,请参考“分享到指定平台” 分享前请阅读不同平台分享内容的详细说明
目录
- 什么是快捷分享
- 代码配置
- 自定义外部回调
- 为不同平台定义差别化分享内容
- 在九宫格中添加自定义图标
- 其他自定义方式
|
什么是快捷分享
快捷分享是ShareSDK提供的一套基于其接口的GUI。通过简单的配置,可以在不考虑ShareSDK具体分享操作的情况下,调用很少的代码,就完成分享操作。
快捷分享有编辑界面和没有编辑界面,可以弹出编辑界面需要具备两个条件:
第一:不是使用分享平台的客户端进行分享
第二:不是自定义分享平台
可以修改代码进行自定义规则
代码配置
集成快捷分享的步骤可以参考导入SDK章节的说明。下面主要介绍如何调用快捷分享:
1)首先也是最重要的,和直接调用接口一样,需要在启动快捷分享前,添加initSDK的代码。
2)在您准备触发分享的地方(如OnClick方法里面),添加如下代码:
public
void showOnekeyshare
(
String platform,
boolean silent
)
{
OnekeyShare oks
=
new OnekeyShare
(
)
;
// 分享时Notification的图标和文字
oks.
setNotification
(R.
drawable.
ic_launcher,
getContext
(
).
getString
(R.
string.
app_name
)
)
;
// address是接收人地址,仅在信息和邮件使用
oks.
setAddress
(
"12345678901"
)
;
// title标题,印象笔记、邮箱、信息、微信、人人网和QQ空间使用
oks.
setTitle
(getContext
(
).
getString
(R.
string.
share
)
)
;
// titleUrl是标题的网络链接,仅在人人网和QQ空间使用
oks.
setTitleUrl
(
"http://sharesdk.cn"
)
;
// text是分享文本,所有平台都需要这个字段
oks.
setText
(getContext
(
).
getString
(R.
string.
share_content
)
)
;
// imagePath是图片的本地路径,Linked-In以外的平台都支持此参数
oks.
setImagePath
(MainActivity.
TEST_IMAGE
)
;
// imageUrl是图片的网络路径,新浪微博、人人网、QQ空间、
// 微信的两个平台、Linked-In支持此字段
oks.
setImageUrl
(
"http://img.appgo.cn/imgs/sharesdk/content/2013/07/25/1374723172663.jpg"
)
;
// url仅在微信(包括好友和朋友圈)中使用
oks.
setUrl
(
"http://sharesdk.cn"
)
;
// appPath是待分享应用程序的本地路劲,仅在微信中使用
oks.
setAppPath
(MainActivity.
TEST_IMAGE
)
;
// comment是我对这条分享的评论,仅在人人网和QQ空间使用
oks.
setComment
(getContext
(
).
getString
(R.
string.
share
)
)
;
// site是分享此内容的网站名称,仅在QQ空间使用
oks.
setSite
(context.
getString
(R.
string.
app_name
)
)
;
// siteUrl是分享此内容的网站地址,仅在QQ空间使用
oks.
setSiteUrl
(
"http://sharesdk.cn"
)
;
// venueName是分享社区名称,仅在Foursquare使用
oks.
setVenueName
(
"Southeast in China"
)
;
// venueDescription是分享社区描述,仅在Foursquare使用
oks.
setVenueDescription
(
"This is a beautiful place!"
)
;
// latitude是维度数据,仅在新浪微博、腾讯微博和Foursquare使用
oks.
setLatitude
(23.122619f
)
;
// longitude是经度数据,仅在新浪微博、腾讯微博和Foursquare使用
oks.
setLongitude
(113.372338f
)
;
// 是否直接分享(true则直接分享)
oks.
setSilent
(silent
)
;
// 指定分享平台,和slient一起使用可以直接分享到指定的平台
if
(platform
!=
null
)
{
oks.
setPlatform
(platform
)
;
}
// 去除注释可通过OneKeyShareCallback来捕获快捷分享的处理结果
// oks.setCallback(new OneKeyShareCallback());
//通过OneKeyShareCallback来修改不同平台分享的内容
oks.
setShareContentCustomizeCallback
(
new ShareContentCustomizeDemo
(
)
)
;
oks.
show
(context
)
;
}
请注意,上面代码中的参数是快捷分享可以接受的所有参数列表,如果您的项目并不集成ShareSDK的所有平台,并没有必要像上面的代码那样传递所有参数进快捷分享。所以请根据您的项目特点,去除不必要的参数。具体平台参数说明,可以参考API文档。
3) 如果您的项目中集成微信平台,请将SDK解压目录中的“Src/wxapi”目录复制到您的项目主包下。如果您的项目中集成易信平台,请将SDK解压目录中的“Src/yxapi”目录复制到您的项目主包下。
完成上述的步骤,快捷分享就已经集成了。
自定义外部回调
新版本的快捷分享添加了一个callback的Extra,可以在启动快捷分享的时候,设置一个callback给它,于是快捷分享操作结束以后,不再调用自己的callback,而是调用从外部设置进来的callback。设置方法和其他的extra类似:
OnekeyShare oks
=
new OnekeyShare
(
)
;
// 参考代码配置章节,设置分享参数
// 设置自定义的外部回调
oks.
setCallback
(
new OneKeyShareCallback
(
)
)
;
oks.
show
(context
)
;
上述代码中的OneKeyShareCallback是一个实现了PlatformActionListener的类,因此它有onComplete、onError和onCancel等方法。启动快捷分享的时候将OneKeyShareCallback的类名传递进去,快捷分享自己会尝试创建其实例,如果创建失败或者没有传递callback字段,则使用默认的callback,如果成功,则以后会将分享结果给这个类处理。
为不同平台定义差别化分享内容
快捷分享允许开发者设置了统一的分享模板以后,为不同平台设置差别化的分享内容。为了实现这个功能,需要为快捷分享提供一个ShareContentCustomizeCallback的实例,并参考下面的伪代码设置到快捷分享中:
OnekeyShare oks
=
new OnekeyShare
(
)
;
// 参考代码配置章节,设置分享参数
//通过OneKeyShareCallback来修改不同平台分享的内容
oks.
setShareContentCustomizeCallback
(
new ShareContentCustomizeDemo
(
)
)
;
oks.
show
(context
)
;
ShareContentCustomizeCallback是一个接口,使用时需要实现其onShare(Platform, ShareParams)方法。此方法被回调的时候会传递一个即将执行分享的平台实例和即将被分享的分享内容(ShareParams)。开发者可以通过修改这个ShareParams参数完成分享内容根据平台的差异化。
/**
* 快捷分享项目现在添加为不同的平台添加不同分享内容的方法。
*本类用于演示如何区别Twitter的分享内容和其他平台分享内容。
*/
public
class ShareContentCustomizeDemo
implements ShareContentCustomizeCallback
{
public
void onShare
(Platform platform, ShareParams paramsToShare
)
{
// 改写twitter分享内容中的text字段,否则会超长,
// 因为twitter会将图片地址当作文本的一部分去计算长度
if
(Twitter.
NAME.
equals
(platform.
getName
(
)
)
)
{
String text
= platform.
getContext
(
).
getString
(R.
string.
share_content_short
)
;
paramsToShare.
setText
(text
)
;
}
}
}
在九宫格中添加自定义图标
快捷分享的九宫格列表提供添加自定义图标的功能,方法如下:
OnekeyShare oks
=
new OnekeyShare
(
)
;
// 参考代码配置章节,设置分享参数
// 构造一个图标
Bitmap logo
= BitmapFactory.
decodeResource
(getResources
(
), R.
drawable.
logo
)
;
// 定义图标的标签
String label
= getResources
(
).
getString
(R.
string.
app_name
)
;
// 图标点击后会通过Toast提示消息
OnClickListener listener
=
new OnClickListener
(
)
{
public
void onClick
(
View v
)
{
Toast.
makeText
(getContext
(
), “Hello”, Toast.
LENGTH_SHORT
).
show
(
)
;
oks.
finish
(
)
;
}
}
;
oks.
setCustomerLogo
(logo, label, listener
)
;
oks.
show
(context
)
;
这样的代码可以多次使用,以添加任意数量的自定义图标。快捷分享默认会将自定义图标放在九宫格的最后位置,如果您需要放在它在其他地方,可以到PlatformGridView.PlatformAdapter中修改代码。
其他自定义方式
因为通用性,所以快捷分享不会提供太多涉及平台差异的高级功能。不过快捷分享是开源的,其源码放在OneKeyhare项目里面,开发者可以通过修改这些源码强化快捷分享的功能。
随着ShareSDK的不断优化和壮大,新平台加入的同时我们还在强化已有平台的功能。比方说微信及微信朋友圈分享时支持分享Bitmap对象、印象笔记分享时支持多图文同时分享等等。这些功能只是部分平台特有的,不会集成到快捷分享中。如果您的项目需要这些功能,需要修改快捷分享的代码,或者直接参考接口调用章节的相关描述,调用接口来实现。