はじめに

ギャラリー・カメラの選択した画像をonActivityResultで取得する場合に以前は「content://media/external/images/media/」形式で
URLが取得できていましたが、「storage/sdcard0/」形式のファイル取得になりました。SDKのバージョン上げたからかな?変わったのかな?調べてません。
そのためcursolがnullになりエラーに陥ったので対応策をメモしておきます。

対応策

「content://media/external/images/media/」形式
「storage/sdcard0/」形式
どちらの場合も対応できるようにコードを分岐しました。

public static final String[] PROJECTION = {
    Images.ImageColumns._ID, // 0
    Images.ImageColumns.TITLE, // 1
    Images.ImageColumns.MIME_TYPE, // 2
    Images.ImageColumns.LATITUDE, // 3
    Images.ImageColumns.LONGITUDE, // 4
    Images.ImageColumns.DATE_TAKEN, // 5
    Images.ImageColumns.DATE_ADDED, // 6
    Images.ImageColumns.DATE_MODIFIED, // 7
    Images.ImageColumns.DATA, // 8
    Images.ImageColumns.ORIENTATION, // 9
    Images.ImageColumns.BUCKET_ID, // 10
    Images.ImageColumns.SIZE, // 11
    Images. ImageColumns.BUCKET_DISPLAY_NAME, // 12
};

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    Uri uri = data.getData();
    Cursor cursor = null;
    if (ContentResolver.SCHEME_CONTENT.equals( uri.getScheme()) ){
    	// content://media/external/images/media/形式
        ContentResolver cr = getContentResolver();
        String[] columns = {MediaStore.Images.Media.DATA };
        cursor = cr.query(mData.getData(), columns, null, null, null);
    } else {
    	// storage/sdcard0/形式 ※HDのディレクトリ構成のまま
        cursor = getContentResolver().query( Images.Media.EXTERNAL_CONTENT_URI, PROJECTION,
                Images.ImageColumns.DATA + " LIKE '%" + mData.getData().toString() + "%'", null, null );
    }
  String fileName = cursor.getString(c.getColumnIndex(Images.Media.DATA));
}

その他おすすめの備忘録

Tagged with:
 

コメントを残す