外部アプリからファイルを取得するには

画像や音楽、動画などのファイルを取得したい場合、自前で処理を実装するよりもIntentから外部アプリに画像を持ってくるように頼む方が楽なうえにコードが少なくて済みます。

手順はこうです。

  1. ACTION_PICKをアクションにもつIntentを作る
  2. MIMEタイプ指定
  3. startActivityForResultでIntentを起動
  4. onActivityResultでファイルのURI取得

大雑把にはこのような流れで、実際には次のようなコードになります。

class MainActivity extends Activity
{
    private final int REQUEST_PICK_PICTURE = 1;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        /** 画像を取ってくる。 */
        Intent intent = new Intent(Intent.ACTION_PICK);
        intent.setType("image/*");
        startActivityForResult(intent, REQUEST_PICK_PICTURE);
    }
    
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        if(requestCode == REQUEST_PICK_PICTURE){
            if(resultCode == RESULT_OK){
                Uri uri = data.getData();
                
                /** Uriを処理... */
                
            }
        }
    }
}

IntentsetTypeには"image/*"などのようにMIMEタイプを渡してファイルの種類を指定します。

取ってきた画像や音楽などのファイルのUriはonActivityResultIntentgetDataメソッドから取得可能です。

ここではMIMEタイプに"image/*"を渡したので次のような画像アプリ選択ダイアログが表示されます。

画像アプリ選択ダイアログ

もしMIMEタイプに"audio/*"を渡すと次のように音楽プレイヤーの選択ダイアログが表示されます。

音楽プレイヤー選択ダイアログ

以上が外部アプリからファイルURIを取得する方法です。

関連項目
プライバシーポリシー