ShareActionProvider 分享API之 DynamicShareActionProvider

公司项目需要用到分享功能,没多大要求,只需要用系统自带的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到菜单里

xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:libray="http://schemas.android.com/apk/res-auto"
    >

            android:id="@+id/menu_item_share"
        android:icon="@drawable/ic_menu_share"
        android:title="Share"
        libray:actionProviderClass="包名.DynamicShareActionProvider"
        libray:showAsAction="always"
        />

在我们需要分享功能的Activity里面

@Override
public 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必须  extends ActionBarActivity

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

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

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

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





你可能感兴趣的:(Android例子,随手记,Provider,Android,分享)