使用ShareActionProvider分享數據
如果你還不知道關于android分享的基礎知識,請先看:Android應用程序間的內容分享機制 一文。
ShareActionProvider其實是ActionProvider的一種。官網的說法是ShareActionProvider讓分享變得更容易,不過在我看來ShareActionProvider的真正優勢是更簡潔漂亮。下面是傳統分享界面與ShareActionProvider分享界面的對比圖:
一個是對話框的形式,一個是popupmenu的形式,而且ShareActionProvider方式一次不會顯示完所有的選項。
下面是官網對ShareActionProvider介紹的譯文:
在ActionBar上使用ActionProvider實現一個高效的友好的分享操作在Android 4.0(API等級14)上更容易了。一個ActionProvider,一旦附加到action bar的菜單上了,就會處理外觀和行為上的操作,至于ShareActionProvider,你值需要提供分享intent,然后它會完成剩下的事情。
注意:ShareActionProvider從API等級14以及更高版本中可用。
更新菜單的聲明
要使用ShareActionProviders,在菜單資源文件中為相應的<item>定義android:actionProviderClass屬性:
<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的外觀和功能。但是,你仍然需要告訴provider你需要分享什么。
圖1.Gallery app中的ShareActionProvider
設置分享Intent
為了讓ShareActionProvider能運行,需要提供一個分享intent。這個分享intent應該和前面講的一致,帶有ACTION_SEND操作和附加的數據,像EXTRA_TEXT或EXTRA_STREAM。要分配一個分享intent,在加載菜單資源時首先要找到相應的MenuItem。接下來,調用MenuItem.getActionProvider()來獲得ShareActionProvider實例。使用setShareIntent()來更新相關的分享intent。這里有一個例子:
private ShareActionProvider mShareActionProvider; ... @Override public boolean onCreateOptionsMenu(Menu menu) { // 加載菜單資源文件 getMenuInflater().inflate(R.menu.share_menu, menu); // 用ShareActionProvider定位MenuItem MenuItem item = menu.findItem(R.id.menu_item_share); // 獲取并存儲ShareActionProvider mShareActionProvider = (ShareActionProvider) item.getActionProvider(); // 然后true來顯示菜單 return true; } // 調用來更新share intent private void setShareIntent(Intent shareIntent) { if (mShareActionProvider != null) { mShareActionProvider.setShareIntent(shareIntent); } }
你可能需要設置一次share intent來創建自己的菜單,或者在UI改變時設置并更新它。比如,當才Gallery app中全屏查看照片時,sharing intent會在照片切換時改變。
更多關于ShareActionProvider的信息, 查看Action bar介紹。