使用ShareActionProvider实现分享功能

      这几天做一个App用到了分享功能,最后用ShareActionProvider实现了,由于是在appcompat-v7使用ShareActionProvider,实现过程中遇到了几个坑,在此记录一下,方便以后查看。

1、首先在菜单xml文件中添加 ShareActionProvider的item:
<item
android :id= "@+id/menu_item_share"
app :showAsAction= "ifRoom"
android :title= "Share"
app :actionProviderClass=
"android.support.v7.widget.ShareActionProvider" />
2、在Activity中定义 ShareActionProvider:
private ShareActionProvider mShareActionProvider ;

注意到导入的包是: import android.support.v7.widget.ShareActionProvider, 与xml文件中保持一致。

3、在onCreateOptionsMenu()中获取 ShareActionProvider,并设置Intent:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu. menu , menu);
// Locate MenuItem with ShareActionProvider
MenuItem item = menu.findItem(R.id. menu_item_share );

// Fetch and store ShareActionProvider
// mShareActionProvider = (ShareActionProvider) item.getActionProvider();
mShareActionProvider =(ShareActionProvider)MenuItemCompat. getActionProvider (item);
Intent sendIntent = new Intent();
sendIntent.setAction(Intent. ACTION_SEND );
sendIntent.putExtra(Intent. EXTRA_TEXT , news . link );
sendIntent.setType( "text/plain" );
setShareIntent(sendIntent);
// Return true to display menu
return true ;
}

//Call to update the share intent
private void setShareIntent(Intent shareIntent) {
if ( mShareActionProvider != null ) {
mShareActionProvider .setShareIntent(shareIntent);
}
}
注意:在获取 ShareActionProvider时使用的是 MenuItemCompat. getActionProvider (item)方法,官网给出的方法是 item.getActionProvider(), 但在v7包中使用ShareActionProvider这种方法不可行,
StackOverflow上有人给出的方法使用 MenuItemCompat. getActionProvider (item),详情请参考: http://stackoverflow.com/questions/27887716/exception-this-is-not-supported-use-menuitemcompat-getactionprovider

最后效果:


  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值