ShareActionProvider 分享API之 DynamicShareActionProvider

来源:互联网 发布:微信陌陌定位软件 编辑:程序博客网 时间:2024/06/03 12:44

公司项目需要用到分享功能,没多大要求,只需要用系统自带的Intent分享,createChooser一个选择器即可,原本一个挺简单的需求,却因为Facebook无法支持Intent.EXTRA_SUBJECT与Intent.EXTRA_TEXT,而搞了挺久。

原本把方法写好,测试了所有的应用,准备上线了,由于国内比较少用Facebook所以也没那么习惯,测试可能也是由于这个原因,在项目准备打包上线的时候报了个问题:Facebook分享内容不正常,Android所有页面分享到Facebook的内容,都只具备了跳转链接的功能,带的文字都没有显示,显示的也不完全。IOS用网页版没问题,但装了FBApp之后,分享内容全为空白,紧急检查了问题之后发现:Android and Facebook share intent 发现没办法只能用SDK分享了,关于SDK分享的办法跟问题,官方给出的DOC已经很明确了,就不阐述了。

可就在把SDK分享做好之后,才想起了createChooser我并不能得知选择的是哪一个App作为分享,原本在分享功能里,倒是有使用activityInfo.packageName来区分Intent.EXTRA_TEXT文本的长短,可就是因为FB不支持才需要改的啊。最后找到了个方法, 不用Chooser,用ShareaActionProvider。

——————————————————————————我是分割线———————————————————————————

这是官方的Api:http://developer.android.com/reference/android/support/v7/widget/ShareActionProvider.html

但我用的是 DynamicShareActionProvider ,区别在于定制性强一点,这是GitHub的地址:https://github.com/nikwen/DynamicShareActionProvider


第一步,先把library添加依赖到项目里去。因为就一个文件,我就把文件复制出来放在我项目原有的library里面了

然后,添加provider到菜单里

<menu xmlns:android="http://schemas.android.com/apk/res/android"      xmlns:libray="http://schemas.android.com/apk/res-auto"    >    <item        android:id="@+id/menu_item_share"        android:icon="@drawable/ic_menu_share"        android:title="Share"        libray:actionProviderClass="包名.DynamicShareActionProvider"        libray:showAsAction="always"        /></menu>
在我们需要分享功能的Activity里面

@Overridepublic boolean onCreateOptionsMenu(Menu menu) {    getMenuInflater().inflate(R.menu.main, menu);    DynamicShareActionProvider mProvider = (DynamicShareActionProvider) MenuItemCompat.getActionProvider(menu.findItem(R.id.menu_item_share));    mProvider.setShareDataType("text/plain");    /**     * 两种分享方式     * 二选一     */    mProvider.setOnShareLaterListener(new DynamicShareActionProvider.OnShareLaterListener() {        @Override        public void onShareClick(Intent shareIntent) {            //分享内容需要耗时获取的情况下,可以在这里调用AsyncTask或是服务        }    });    mProvider.setOnShareIntentUpdateListener(new DynamicShareActionProvider.OnShareIntentUpdateListener() {        @Override        public Bundle onShareIntentExtrasUpdate() {            Bundle extras = new Bundle();            extras.putString(android.content.Intent.EXTRA_TEXT, "分享的内容");            return extras;        }    });    return true;}
正常情况下,现在就可以运行了,可是运行起来发现不对,不能用,为啥?有个很重要的地方,那就是Activity必须 extendsActionBarActivity

我用的是setOnShareLaterListener,在onShareClick方法里面用 

shareIntent.getComponent().getPackageName().contains("com.facebook")

区分开来,调用FBShareSDK来做我想做的东西。

没代码上了,就这么多点东西。





1 0
原创粉丝点击