使用ShareActionProvider实现分享功能

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_21482865/article/details/51578880

      这几天做一个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

最后效果:


猜你喜欢

转载自blog.csdn.net/qq_21482865/article/details/51578880