В этом уроке
Реализация эффективного и удобного действия «поделиться» в ActionBar стала еще проще с введением ActionProvider в Android 4.0 (API Уровень 14). ActionProvider, сразу после присоединения к пункту меню в панели действий, обрабатывает как внешний вид, так и поведение этого элемента. В случае ShareActionProvider, вы предоставляете интент «обмена» и он сделает все остальное.
Примечание: ShareActionProvider доступен начиная с Уровня API 14 и выше.

Рисунок 1.ShareActionProvider в приложении Галерея.
[wpanchor id=»1″]
Обновление макета меню в android приложении
Чтобы начать работу с ShareActionProviders, определите android:actionProviderClass атрибут для соответствующего<item> в вашем ресурс меню файле:
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/menu_item_share" android:showAsAction="ifRoom" android:title="Share" android:actionProviderClass= "android.widget.ShareActionProvider"/> ... </menu>
Это делегирует ответственность за внешний вид элемента и функции в ShareActionProvider. Однако, вам нужно будет сообщить провайдеру, чем вы хотели бы поделиться.
[wpanchor id=»2″]
Установка интента для обмена данными между android приложениями
Чтобы ShareActionProvider функционировал, необходимо предоставить интент для обмена. Этот интент должен быть таким же, как описано в уроке Отправка простых данных в другие приложения , с действием ACTION_SEND и дополнительными данными установленных с помощью EXTRA_TEXT и EXTRA_STREAM. Чтобы назначить интент обмена, сначала найдите соответствующий MenuItem в своем ресурсе меню в вашем Activity или Fragment. Далее, вызовите MenuItem.getActionProvider()для получения экземпляра ShareActionProvider. Используйте setShareIntent() для обновления интента обмена, связанного с этим элементом действия. Вот пример:
private ShareActionProvider mShareActionProvider;
...
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate menu resource file.
getMenuInflater().inflate(R.menu.share_menu, menu);
// Locate MenuItem with ShareActionProvider
MenuItem item = menu.findItem(R.id.menu_item_share);
// Fetch and store ShareActionProvider
mShareActionProvider = (ShareActionProvider) item.getActionProvider();
// 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 , см. Панель действий.