使用ShareActionProvider分享數據

ChaMonson 8年前發布 | 25K 次閱讀 Android開發 移動開發

 如果你還不知道關于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介紹。

 

 本文由用戶 ChaMonson 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!