Android4.0(以降ICS)のActionBarには、共有ボタンで共有機能を使用したことのあるアプリのアイコンを、ActionBarのMenuItemに追加することができるようになりました。
  
  詳細は以下から。
  
  共有履歴をActionBarに追加するために今回は以下の流れに沿って解説します。
      - 共有履歴を表示するスペースの確保
- ShareActionProviderの設定
まずは共有したアプリのMenuItemを格納するための領域をmenuのレイアウトファイルで確保します。
  共有履歴を表示するスペースの確保
  action_bar_action_provider.xml
                      | 1 2 3 4 5 6 7 8 9 10 11 12 13 |                       <item android:id="@+id/menu_item_share_action_provider_action_bar"
         android:showAsAction="always"
         android:title="@string/action_bar_share_with"
         android:actionProviderClass="android.widget.ShareActionProvider"/>
       <item android:id="@+id/menu_item_share_action_provider_overflow"
         android:showAsAction="never"
         android:title="@string/action_bar_share_with"
         android:actionProviderClass="android.widget.ShareActionProvider"/>
   </menu>
 | 
    3〜6行目は最初から表示しておく共有機能のMenuItemです。
  8〜11行目が一度使用した共有先アプリを記憶するためのMenuItemです。
  ポイントはandroid:actionProviderClass属性にandroid.widget.ShareActionProviderを指定することです。
ShareActionProviderクラスを使用するためにはこの記述が必要です。
ShareActionProviderクラスはICSから追加されたクラスで、MenuItemで共有された各IntentのActionを管理するための機能を提供します。
また、ShareActionProviderクラスはActionごと、データの種類(テキスト、画像等)ごとに作成することができ、それぞれの共有の履歴をActionBarに表示させることが可能です。
  ShareActionProviderの設定
  次にコードで、ShareActionProviderに共有するIntentのActionの指定、共有アプリの履歴の保存先の指定を行います。
  Actionbar.java
                      | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |         @Override
 publicbooleanonCreateOptionsMenu(Menu menu) {
     
     getMenuInflater().inflate(R.menu.action_bar_action_provider,         menu);
     MenuItem actionItem =         menu.findItem(R.id.menu_item_share_action_provider_action_bar);
       ShareActionProvider actionProvider =         (ShareActionProvider) actionItem.getActionProvider();
     actionProvider.setShareHistoryFileName(ShareActionProvider.DEFAULT_SHARE_HISTORY_FILE_NAME);
         
     Intent shareIntent = newIntent(Intent.ACTION_SEND);
     shareIntent.setAction(Intent.ACTION_SEND);
     shareIntent.setType("text/plain");
     shareIntent.putExtra(Intent.EXTRA_TEXT, "aaa");
     actionProvider.setShareIntent(shareIntent);
         
     MenuItem overflowItem =         menu.findItem(R.id.menu_item_share_action_provider_overflow);
     ShareActionProvider overflowProvider =
         (ShareActionProvider)         overflowItem.getActionProvider();
     overflowProvider.setShareHistoryFileName(
         ShareActionProvider.DEFAULT_SHARE_HISTORY_FILE_NAME);
         
     overflowProvider.setShareIntent(shareIntent);
         
     returntrue;
 }
 | 
    ShareActionProviderクラスの設定はonCreateOptionsMenu内で行います。
  5〜8行目と14行目は最初から表示させておくMenuItemで、17〜22行目は共有履歴を表示するためのMenuItemです。
  ではgetActionProviderメソッドを使用してMenuItemのShareActionProviderインスタンスを取得しています。
ここで取得したShareActionProviderインスタンスに対して、共有履歴の保存先と共有するIntentのActionを指定していきます。
  8行目では共有履歴の保存先ファイル名をsetShareHistoryFileNameメソッドで指定しています。
setShareHistoryFileNameメソッドの引数には保存先のファイル名を指定します。
基本的にはShareActionProvider#DEFAULT_SHARE_HISTORY_FILE_NAME定数に保持されているファイル名で問題ありません。
19〜20行目では上記と同じ内容を共有履歴を表示するためのMenuItemに設定しています。
  14行目ではShareActionProviderインスタンスに共有するIntentを指定しています。
サンプルではActionがIntent#ACTION_SEND、データが"text/plain"の受け口を持っているアプリへ共有できるようにしています。
22行目では上記と同じ内容を共有履歴を表示するためのMenuItemに設定しています。
 
0 件のコメント:
コメントを投稿