ファイルピッカーAPI概要

2.外部アプリからのContentsManager起動仕様

2.1 外部アプリからのCM起動シーケンス

外部アプリからContentsManager(以下、CMアプリと記載)を起動する際のシーケンスを以下に示す。

2.2 Activity起動パラメータ

外部アプリよりCMアプリは、参照連携(暗黙的/明示的)にてActivity起動(Activity.startActivityForResult)が行われる。
外部アプリから起動されるCMアプリの、Activity起動パラメータは以下の通りである。

項目 必須 内容
アクション Intent.ACTION_PICK
カテゴリ クラス指定無し(暗黙)の場合は、Intent.CATEGORY_DEFAULTを、クラス指定あり(明示)場合は、指定の必要なし。
MIMEタイプ
  • 初期表示させたいタブのMIMEタイプを指定する。(ここでの初期表示とは、そのタブが選択された状態で表示させるということ)
  • クラス指定あり(明示)場合、MIMEタイプを指定する必要はない。指定しない場合の初期表示は、Extraキー[EXTRA_KEY_CATEGORY]に準ずる。
    MIMEタイプで指定したタブが、Extraキー[EXTRA_KEY_CATEGORY]で表示指定しカテゴリと合致しない場合、MIMEタイプの指定は無効になる。
  • クラス指定無し(暗黙)の場合、必ず何れかのMIMEタイプを指定すること。なお、同じタブ内のものであれば、どれを選んでも動作は変わらない。
  • タブを直接指定したい場合は、タブ指定用に用意された特別なMIMEタイプ(vnd.android.cursor.dir/xxx)を指定すること。
  • MIMEタイプを指定した場合、どのタブが初期表示されるかは、下記の表を参考のこと。
初期表示させたいタブ サポートするMIMEタイプ
ピクチャ vnd.android.cursor.dir/image
※タブを直接指定したい場合は、このMIMEタイプを指定して下さい!
image/jpeg
image/gif
image/png
image/x-ms-bmp
image/vnd.wap.wbmp
ムービー vnd.android.cursor.dir/video
※タブを直接指定したい場合は、このMIMEタイプを指定して下さい!
video/mp4
video/x-ms-wmv
ミュージック vnd.android.cursor.dir/audio
※タブを直接指定したい場合は、このMIMEタイプを指定して下さい!
audio/amr
audio/amr-wb
audio/mp4
audio/mpeg
audio/x-ms-wma
audio/x-wma-drm
audio/x-wma-10-professional
audio/midi
audio/mobile-xmf
audio/imelody
audio/x-wav
audio/sp-midi
application/ogg
application/vnd.smaf
ドキュメント
※add-onsでは本種別のコンテンツは参照することが出来ません。
vnd.android.cursor.dir/doc
※タブを直接指定したい場合は、このMIMEタイプを指定して下さい!
application/msword
application/vnd.ms-excel
application/vnd.ms-powerpoint
application/pdf
text/comma-separated-values
text/plain
application/vnd.openxmlformats-officedocument.wordprocessingml.document
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
application/vnd.openxmlformats-officedocument.presentationml.presentation
その他
※add-onsでは本種別のコンテンツは参照することが出来ません。
vnd.android.cursor.dir/etc
※タブを直接指定したい場合は、このMIMEタイプを指定して下さい!
application/x-shockwave-flash
application/x-tar
text/x-vcard
text/calendar
text/x-vcalendar
text/x-vmessage
text/x-vnote
application/x-mpeg
audio/qcp
application/vnd.yamaha.hv-script
message/rfc822
text/html
audio/x-mpegurl
audio/x-scpls
application/vnd.ms-wpl
application/x-zaurus-zbf
application/x-zaurus-zbk
application/x-iwnn
text/x-vbookmark
データ 指定なし
クラス 暗黙的にCMを呼び出す場合は、指定なし、明示的にCMを呼び出す場合には、jp.co.sharp.android.cm を指定すること。
拡張1
(putExtra)
絞り込み条件(CMにて表示されているコンテンツのクエリー条件)

Extraキー《String name》
カテゴリ(種別)
jp.co.sharp.android.contentsmanager.EXTRA_KEY_CATEGORY
保存場所
jp.co.sharp.android.contentsmanager.EXTRA_KEY_SAVE_POINT
検索対象文字列
jp.co.sharp.android.contentsmanager.EXTRA_KEY_WORD
ソート条件
jp.co.sharp.android.contentsmanager.EXTRA_KEY_SORT_TYPE
選択モード
jp.co.sharp.android.contentsmanager.EXTRA_KEY_SELECT_TYPE

設定値《Bundle value》
ArrayList<String>:
カテゴリ(種別)
指定されたカテゴリパラメータは、CM起動時の選択可能タブである
"0" 1) ピクチャ:指定なし
"1" 2) ピクチャ:デジタルカメラ画像(Exifヘッダ有りのJPEGファイルを表示)
"2" 3) ピクチャ:絵文字(20x20のgif,jpeg画像を表示)
"3" 4) ピクチャ:その他
"4" 5) ムービー:指定なし
"5" 6) ムービー:撮影動画(microSDカードの"/movie"以下の動画を表示)
"6" 7) ムービー:ダウンロード動画(microSDカードの"/download"以下の動画を表示)
"7" 8) ムービー:その他
"8" 9) ミュージック:指定なし
"9" 10) ミュージック:ミュージック
"10" 11) ミュージック:サウンド
"14" 12) ドキュメント:指定なし
"15" 13) ドキュメント:Office
"16" 14) ドキュメント:PDF
"17" 15) ドキュメント:txt
"18" 16) その他:指定なし(その他タブは種別指定できません)
※未指定の場合はMimeTypeにそったタブのみを表示する。MimeTypeが"*/*"の場合はTV録画タブを除く全てのタブを表示する。MimeTypeが[image/*]が場合は、Image/* MimeTypeの一覧を表示する。MimeTypeが[aplication/*]の場合はTV録画タブ以外のAplication/*のコンテンツがあるタブを表示する。一覧に表示されるのは[Application/*]となる。
※カテゴリ指定とMIMEタイプ指定が異なっている場合はカテゴリ指定を優先する。未指定の場合は初期値としてピクチャを表示。指定してある場合は最初に指定されたカテゴリのタブを表示。
※カテゴリパラメータは起動後の指定・変更はできない。
※同一カテゴリに属する種別を複数指定した場合、該当カテゴリ指定なし(ALL)と同じ扱いとなる。

ArrayList<String>:
保存場所
"1" : microSD
"2" : プリセットデータ
※未指定の場合はデフォルト:microSDが選択対象
※プリセットデータ、microSD+それら以外の値の場合、プリセットデータ、microSDのみで起動する。
※プリセットデータ、microSD以外の無効値だけを指定した場合、起動エラーとする。

String:
検索対象文字列 : 検索文字列
外部アプリより絞り込みを行いたい検索対象文字列を指定
制限事項:
1.最大入力文字数は、100byte(最大文字数100byteを超える場合は切り捨て)
2.文字列内にカンマ(",")等で複数指定は不可
3.基本的な禁則文字は使用不可(下記、例を参照)
 \ 半角エンマーク
 / 半角スラッシュ
 : 半角コロン
 * 半角アスタリスク
 ? 半角クエスチョンマーク
 " 半角ダブルクォーテーション
 < 半角左アングルかっこ
 > 半角右アングルかっこ
 | 半角パイプ
 改行コード
 ; 半角セミコロン
 , 半角カンマ
 . 半角ドット
4.絵文字は使用不可
※制限事項に違反していた場合は、[100byte以上は切り捨て]禁則文字は読み飛ばしを行う。ただし、絵文字についてチェックできないので指定した際の挙動は保障しない

String:
ソート条件
"4" 1) ファイルサイズ 昇順
"5" 2) ファイルサイズ 降順
"0" 3) 保存日時 昇順
"1" 4) 保存日時 降順
"2" 5) タイトル 昇順
"3" 6) タイトル 降順
※未指定の場合はデフォルト:3) 保存日時 昇順

String:
選択モード
"0" : 1件選択
"1" : 複数選択
※未指定の場合はデフォルト:1件選択
※複数選択モードの場合のチェック可能な上限は100件

2.2.1 サンプルソースコード

下記ソースコードは、外部アプリよりCMを起動する際のサンプソースコードである。

Android4.4(KK)以降の端末向けで、SDカード、本体ストレージを参照する場合は、AndroidManifest.xmlに以下を追加すること

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.example.package.name">
   ...
   <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
   <application android:name="MyApplication" >
     ...
   </application>
   ...
 </manifest>
Intent intent = new Intent();
intent.setAction(Intent.ACTION_PICK);
/* 明示的インテント */
intent.setClassName(
    "jp.co.sharp.android.cm",
    "jp.co.sharp.android.cm.main.view.ContentManagerActivity"
);
 
/* MIMEタイプの設定 */
//imageの場合

intent.setType("vnd.android.cursor.dir/image");
 
/* カテゴリ設定 */
ArrayList<String> category = new ArrayList<String>();
/*必要なカテゴリを追加する*/
category.add("1");/*デジタルカメラ画像*/
category.add("2");/*絵文字*/
intent.putStringArrayListExtra(
    "jp.co.sharp.android.contentsmanager.EXTRA_KEY_CATEGORY",
    category
);
 
/* 保存場所設定 */
ArrayList<String> savePoint = new ArrayList<String>();
savePoint.add("1");/* 外部Storage */
intent.putStringArrayListExtra(
    "jp.co.sharp.android.contentsmanager.EXTRA_KEY_SAVE_POINT",
    savePoint
);
 
//検索対象文字列設定
intent.putExtra(
    "jp.co.sharp.android.contentsmanager.EXTRA_KEY_WORD",
    "検索文字列を入力"
);
 
//ソート条件設定
intent.putExtra(
    "jp.co.sharp.android.contentsmanager.EXTRA_KEY_SORT_TYPE",
    "5"
);  /*ファイルサイズ降順*/
 
//選択モード設定
intent.putExtra(
    "jp.co.sharp.android.contentsmanager.EXTRA_KEY_SELECT_TYPE",
    "0"
);  /*一件選択モード*/
 
startActivityForResult(intent, 0);

2.2.2 Extraキー設定値反映項目 CM画面対応

上記表の拡張1(putExtra)で設定されるExtraキーの設定値は、CMアプリ画面の下記項目に対応する

2.3 Activity終了パラメータ

戻り値
Activity.setResult(int resultCode, Intent data)
《int resultCode》 終了コード
Activity.RESULT_OK
Activity.RESULT_CANCELED
※キャンセル時には、《Intent data》の各パラメータに何も設定されない
《Intent data》 起動先アプリから設定されるIntent
項目 必須 内容
データ 選択したコンテンツのUri
複数件の場合は、1件目のUriがセットされる。(Androidでの互換性確保の為)

content://internal/images/media/[ID] ※ など

※[ID]:ContentsManagerにより選択されたファイルのレコードID
使用方法については、サンプルソースコード("2.5 選択されたコンテンツ~")参照
拡張1
(putExtra)
ファイルパス(選択されたUriのリストを格納したテキストファイル)
選択ファイルが複数件の場合のみファイルパスが設定され、1件の場合ファイルパスは設定されない。
※本ファイルは、次回CMにて参照連携が行われる際に削除される

Extraキー《String name》
jp.co.sharp.android.contentsmanager.EXTRA_KEY_SELECT_LIST
:選択コンテンツのリストファイル
設定値《Bundle value》
String
:選択されたUriのリストを格納したテキストファイルのパス
※選択Uriが複数件の場合のみ本ファイルを作成
使用方法については、サンプルソースコード("2.4 一時ファイルから~")参照

CMアプリで設定されたActivity終了パラメータより、一時ファイル("拡張1")から選択されたコンテンツ情報を取得する。

2.4 一時ファイルから選択コンテンツ情報の取得

サンプルコード

/* ファイルパス(選択されたUriのリストを格納したテキストファイル)の取得 */
String readFile = intent.getStringExtra(
    "jp.co.sharp.android.contentsmanager.EXTRA_KEY_SELECT_LIST"
);
 
/* 一時ファイルから選択コンテンツ情報を1件ずつ読み込む */
String readBuf;
 
File file = new File(readFile);
FileReader freader = null;
BufferedReader breader = null;
try {
    freader = new FileReader(file);
    breader = new BufferedReader(freader);
    while((readBuf = breader.readLine()) != null){
        /* Uriを1件ずつ読み出す */
        /* CMアプリで選択したカテゴリを再生 */

    }
} catch (IOException e) {
    // TODO 自動生成された catch ブロック
    e.printStackTrace();
} finally {
    try {
        if (breader != null) {
            breader.close();
        }
    } catch (Exception e) {
    }
}

CMアプリで設定されたActivity終了パラメータより選択したコンテンツのUri("データ")を取得する。

2.5 選択されたコンテンツ(1件)情報の取得

サンプルコード

/* 選択したコンテンツのUriを取得 */
 Uri uri = intent.getData();

戻る

このページの先頭へ