公司项目需要用到分享功能,没多大要求,只需要用系统自带的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里面
正常情况下,现在就可以运行了,可是运行起来发现不对,不能用,为啥?有个很重要的地方,那就是Activity必须 extends ActionBarActivity@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; }
我用的是setOnShareLaterListener,在onShareClick方法里面用
shareIntent.getComponent().getPackageName().contains("com.facebook")
区分开来,调用FBShareSDK来做我想做的东西。
没代码上了,就这么多点东西。