Android开发-如何快速实现分享功能

来源:互联网 发布:朗文和牛津 知乎 编辑:程序博客网 时间:2024/05/01 23:11

1 获取ShareSDK

为了集成ShareSDK,您首先需要到ShareSDK官方网站注册并且创建应用,获得ShareSDKAppkey,然后到SDK下载页面下载SDK的压缩包,解压以后可以得到下图的四个目录:

Android开发 <wbr>如何快速实现分享功能

 

其中的Libs包含ShareSDK的类库,Src包含集成微信和新浪微博需要的回调,Res是开发者信息示例,而Sample则包含一个完整的操作演示。
Libs
里具体包括三个文件夹,分别是ShareSDK的全局依赖库、ShareSDK当前支持的所有平台工具库和ShareSDK可视化UI的一些支持库。全局依赖库是集成ShareSDK的基础,ShareSDK的任何平台都依赖于这个库,而“ShareSDK-GUI”提供的是一个侧栏控件和一个快捷分享工具,以方便开发者更快速地集成ShareSDK

2 快速集成

2-1 导入Libs
1
 Libs\Global-Dependences下的jar包复制到您的libs目录下。
2
 Libs\Platforms中选择您感兴趣的平台,比方说新浪微博“QQ空间腾讯微博等,复制相应的压缩包您项目的libs目录下并解压,解压过程中如遇覆盖提示,请同意覆盖。
3
 如果您决定使用ShareSDK提供的快捷分享工具,请复制Libs\ShareSDK-GUI中复制cn.sharesdk.onekeyshare.jar到您项目中。
4
 如果您的开发环境不能自动加载ShareSDKjar包到您的项目中,请修改您项目的构建路径,将上述jar包添加到您的项目中。下图以Eclipse为例,展示添加后的效果:

Android开发 <wbr>如何快速实现分享功能

 


2-2 添加代码
1
 打开您项目的入口Activity,在其onCreate中插入下面的代码: 

?

1

AbstractWeibo.initSDK(this);


这行代码用于初始化ShareSDK,必须在程序启动之时调用。
2
)使用下面的代码,调用ShareSDK快捷分享功能:

分享时Notification的图标

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

Intent i = new Intent(this, ShareAllGird.class);

// 分享时Notification的图标

i.putExtra("notif_icon", R.drawable.ic_launcher);

// 分享时Notification的标题

i.putExtra("notif_title", getString(R.string.app_name));

// 分享内容的标题(仅部分平台需要此字段)

i.putExtra("title", "ShareSDK Demo");

// 分享内容的文本

i.putExtra("text", "share at: " + System.currentTimeMillis());

// 分享内容的本地图片路径(为null或文件不存在表示不分享图片)

i.putExtra("image", Environment.getExternalStorageDirectory () + "/ssdk.png");

// 分享内容的网络图片地址(仅部分平台需要此字段)

i.putExtra("image_url", "http://sharesdk.cn/Public/Frontend/images/logo.png");

// 设置是否跳转内容编辑页面,true表示不跳转,不传递表示false(跳转)

i.putExtra("silent", silent); startActivity(i);


3
 如果您的项目中集成微信平台,请将Sample/src/cn/sharesdk/demo中的wxapi”目录复制到您的项目主包下。
4
 如果您的项目中集成微博平台,请将Sample/src中的com目录复制到您的项目中。

2-3 添加开发者信息
ShareSDK使用统一的格式管理您在不同平台上注册的开发者信息。这些信息都存放在您项目的assets/ShareSDKDevInfor.xml中。请到“Res”中将ShareSDKDevInfor.xml复制到您项目的对应位置,打开文件,然后根据不同的平台的数据,如下面的例子所示,替换您在这个平台上的开发者信息: 

?

1

2

3

4

5

6

7

<ShareSDK AppKey="填写您在ShareSDK上注册到的AppKey" />

<SinaWeibo

SortId="新浪微博在您分享列表中的位置,整型,数值越大越靠后"

AppKey="填写您在新浪微博上注册到的AppKey"

AppSecret="填写您在新浪微博上注册到的

AppSecret" Id="自定义字段,您可以自行选择一个整型数据,用于您项目中对此平台的识别符"

RedirectUrl="填写您在新浪微博上注册的RedirectUrl" />



2-4 配置AndroidManifest.xml
1
 请在您项目的AndroidManifest.xml,添加了如下的所有权限: 

?

1

2

3

4

5

6

7

8

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

<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

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

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

<uses-permission android:name="android.permission.SEND_SMS"/>



这些权限将允许您的项目和ShareSDK获取连接网络的权限、获取您的设备网络状态的权限、实现https安全连接的权限、读取手机设备状态的权限和保存必要配置的权限。一般来说,即便不集成ShareSDK,大部分的项目也都会注册申请这些权限。
2
)在application下注册下面的Activity 

?

1

2

3

4

5

6

7

<activity

    android:name="cn.sharesdk.framework.AuthorizeActivity"

    android:configChanges="keyboardHidden|orientation"

    android:screenOrientation="portrait" >

    <!-- NoTitle表示不显示授权页面的标题 boolean值,为true表示不显示,否则为显示,默认为显示 -->

    <!-- <meta-data android:name="NoTitle" android:value="true" /> -->

</activity>


3
)如果您的项目集成为微信和新浪微博,在application下注册下面的Activity 

?

01

02

03

04

05

06

07

08

09

10

<activity

    android:name="cn.sharesdk.sina.weibo.SSOActivity"

    android:configChanges="keyboardHidden|orientation"

    android:screenOrientation="portrait"

/>

<activity

    android:name="cn.sharesdk.demo.wxapi.WXEntryActivity"

    android:exported="true"

    android:screenOrientation="portrait"

/>


4
)如果您的项目集微信,在application下注册下面的Activity

?

1

2

3

4

5

<activity

    android:name="cn.sharesdk.demo.wxapi.WXEntryActivity"

    android:exported="true"

    android:screenOrientation="portrait"

/>


5
)如果您使用ShareSDK的快捷分享工具,在application下注册下面的Activity

?

01

02

03

04

05

06

07

08

09

10

11

12

13

<activity

    android:name="cn.sharesdk.onekeyshare.ShareAllGird"

    android:theme="@android:style/Theme.Translucent.NoTitleBar"

    android:configChanges="keyboardHidden|orientation"

    android:screenOrientation="portrait"

    android:windowSoftInputMode="adjustPan|stateHidden"

/>

<activity

    android:name="cn.sharesdk.onekeyshare.SharePage"

    android:configChanges="keyboardHidden|orientation"

    android:screenOrientation="portrait"

    android:windowSoftInputMode="stateHidden|adjustResize"

/>



2-5签名
对于ShareSDK的大部分平台,只要您将其jar包和依赖集成到您的项目以
后就可以开始进行工作了。但是对于微信的两个平台却不行。因为微信开放平台要求android的第三方开发者需要提供自己项目的信息和签名指纹数据。为了演示分享功能Sample包中携带了一个"demokey.keystore"keystore文件,其密码是“123456”,如果您在调试SSDKDemo的时候集成了微信的平台,就需要使用这个keystoreapk进行签名,之后才能尝试微信的分享。

3 主要功能解释
ShareSDK使用同一的接口实现不同平台的同类操作,如:授权、分享、关注等等。因此开发者可以在不理会平台差异的情况下,简单使用一句代码完成不同平台的各种操作。

3-1 获取已集成的平台列表
下面的代码演示获取已经集成到您项目中的ShareSDK平台列表: 

?

1

AbstractWeibo[] weiboList = AbstractWeibo.getWeiboList(context)


返回的列表中平台的排列顺序依照您在ShareSDKDevInfor.xml中为其配置的SortId来定。
请注意,此方法在第一次调用的时候可能会比较耗时,因此不建议在主线程中调用。

3-2 通过名字获取指定平台实例
除了getWeiboList的方法可以获取到平台实例以外,如果您想单独获取某一个平台的实例,还可以利用下面的方法,若获取腾讯微博的实例: 

?

1

AbstractWeibo weibo = AbstractWeibo.getWeibo(context, TencentWeibo.NAME);


其中的,其中的TencentWeibo.NAME是腾讯微博平台的静态字段,每一个平台都有一个NAME的字段,表示其名字。

3-3 设置操作回调
不论利用ShareSDK进行何种操作,如果希望得到操作的结果,都必须为执行操作的平台设置WeiboActionListener的回调。下面的代码演示对腾讯微博绑定WeiboActionListener的方法: 

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

AbstractWeibo weibo = AbstractWeibo.getWeibo(context, TencentWeibo.NAME);

weibo.setWeiboActionListener(

    new WeiboActionListener() {

        public void onError(AbstractWeibo weibo, int action, Throwable t) {

            // 操作失败的处理代码

        }

         public void onComplete(AbstractWeibo weibo, int action, HashMap<String, Object> res) {

        // 操作成功的处理代码

        }

        public void onCancel(AbstractWeibo weibo, int action) {

        // 操作取消的处理代码

        }

    }

);


3-4 授权
手动授权并不是必要的操作,但是ShareSDK提供手动的授权操作,如下面的代码演示新浪微博的授权操作: 

?

1

2

3

AbstractWeibo weibo = AbstractWeibo.getWeibo(context, SinaWeibo.NAME);

weibo.setWeiboActionListener(waListener);

weibo.authorize();


授权结果将通过WeiboActionListener接口返回。

3-5 获取用户资料
下面的代码演示新浪微博获取资料的方法,其他的平台(微信除外)也支持类似的操作: 

?

1

2

3

String account = "3189087725";

AbstractWeibo weibo = AbstractWeibo.getWeibo(context, SinaWeibo.NAME);

weibo.setWeiboActionListener(waListener); weibo.showUser(account);


其中account是准备获取资料的帐号,如果accountnull,则表示获取授权账户自己的资料。
获取资料前ShareSDK会自行判断平台是否已经授权,若未授权,会自行执行授权操作。

3-6 分享
下面的代码演示通用的分享操作(QQ空间、印象笔记请参考另外更合适其平台特性的接口) 

?

1

2

3

4

5

String text = “测试分享的文本”;

String image = “/mnt/sdcard/测试分享的图片.jpg” ;

AbstractWeibo weibo = AbstractWeibo.getWeibo(context, SinaWeibo.NAME);

weibo.setWeiboActionListener(waListener);

weibo.share(text, image);


其中的text是分享的文本内容,image是分享图片的本地路径。
微信好友和微信朋友圈的分享,应该使用新的分享接口,具体操作可以参考Sample中的相关例子,下面的例子展示使用微信分享网页的方法: 

?

1

2

3

4

5

6

7

8

AbstractWeibo

weibo = AbstractWeibo.getWeibo(menu.getContext(), Wechat.NAME);

weibo.setWeiboActionListener(this);

String title = "这是标题";

String text = "这是文本内容";

String url = "http://sharesdk.cn";

String thumbUrl = "/mnt/sdcard/网页缩略图.jpg";

 weibo.share(AbstractWeibo.SHARE_WEBPAGE, title, text, url, thumbUrl);


其中的share(int, Object…)方法是新版本添加的分享接口,暂时支持微信两个平台的分享,但后续版本的分享功能会往这个方法迁移。
QQ
空间调用下面的接口更适合其平台特性:

?

1

2

3

4

5

6

String title = “测试分享的标题

String text = “测试分享的文本”;

String imageUrl = “[url]http://www.someserver.com/[/url]测试分享的图片.jpg”

AbstractWeibo weibo = AbstractWeibo.getWeibo(context, QZone.NAME);

weibo.setWeiboActionListener(waListener);

weibo.share(title, null, null, text, imageUrl, "ShareSDK", "http://www.sharesdk.cn");


对于接口的详细解释,请参考QQ登录平台的add_share接口。
印象笔记的分享内容需要携带笔记标题,因此调用下面的接口更为合适: 

?

1

2

3

4

5

6

String title = “测试分享的标题

String text = “测试分享的文本”;

String image = “/mnt/sdcard/测试分享的图片.jpg”

AbstractWeibo weibo = AbstractWeibo.getWeibo(context, Evernote.NAME);

weibo.setWeiboActionListener(waListener);

weibo.save(title, text, image);


对于印象笔记,分享的share接口依然可用,但是更好的接口是save
执行分享前ShareSDK会自行判断平台是否已经授权,若未授权,会自行执行授权操作。
信息和邮件分享功能使用send接口,具体例子如下:

?

1

2

3

4

5

6

7

String address = ”10086”;

String title = “测试分享的标题

String text = “测试分享的文本”;

String image = “/mnt/sdcard/测试分享的图片.jpg”

AbstractWeibo weibo = AbstractWeibo.getWeibo(context, ShortMessage.NAME);

weibo.setWeiboActionListener(waListener);

((ShortMessage) weibo).send(address, title, text);


短信的分享只支持SMS分享,如果直接分享MMS,则分享结果无法获取。至于邮件,不管分享方式如何,都无法直接获取分享结果。
执行分享前ShareSDK会自行判断平台是否已经授权,若未授权,会自行执行授权操作。
3-7 关注指定用户
当前的ShareSDK已经实现了新浪微博和腾讯微博的关注功能,下面的代码演示腾讯微博的关注操作 

?

1

2

3

4

String account = "shareSDK";

AbstractWeibo weibo = AbstractWeibo.getWeibo( context,TencentWeibo.NAME);

weibo.setWeiboActionListener(waListener);

weibo.followFriend(account);


执行关注前ShareSDK会自行判断平台是否已经授权,若未授权,会自行执
行授权操作。

3-8
 获取平台数据库
ShareSDK将每一个平台的授权数据都缓存在SharedPreferences中,并且相互独立。如果你希望获取任何一个平台的授权数据,可以像下面这样子做:

?

1

2

3

4

AbstractWeibo weibo = AbstractWeibo.getWeibo(this, TencentWeibo.NAME);

String accessToken = weibo.getDb().getToken();

String openId = weibo.getDb().get("openid");

// 接下来执行你要的操作


不同平台都会缓存access token等信息,可以通过getToken()或者setToken()进行操作。此外,开发者还可以通过直接get()某个字段的办法,获取其数据,如上面通过openid字段获取到腾讯微博的openId

3-8 取消授权
下面的代码演示新浪微博取消授权的操作 

?

1

2

AbstractWeibo weibo = AbstractWeibo.getWeibo(context, SinaWeibo.NAME);

weibo.removeAccount();


此接口不需要WeiboActionListener,所以直接调用即可。

0 0