簡體   English   中英

從ContentResolver.query()獲取URI

[英]Get URI from ContentResolver.query()

我正在查詢Images表以獲取MediaStore.Images.Media.EXTERNAL_CONTENT_URI目錄中的所有圖片。

請參閱以下查詢:

String[] what = new String[]{ MediaStore.Images.ImageColumns.DATE_TAKEN,
            MediaStore.Images.ImageColumns._ID,
            MediaStore.Images.ImageColumns.MIME_TYPE,
            MediaStore.Images.ImageColumns.DATA };

String where = MediaStore.Images.Media.MIME_TYPE + "='image/jpeg'" +
            " OR " + MediaStore.Images.Media.MIME_TYPE + "='image/png’";

Cursor cursor = getContext().getContentResolver()
                    .query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
                            what,
                            where,
                            null,
                            MediaStore.Images.ImageColumns.DATE_TAKEN + " DESC”);

現在,我想讓Uri指向每個結果。 這就是我現在正在做的事情:

int dataIndex = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
String path = cursor.getString(dataIndex);
final Uri uri = Uri.fromFile(new File(path));

例如,我從DATA列獲取路徑,創建一個文件並使用Uri.fromFile 我有兩個問題。

  1. 這保證有效嗎? 以上查詢是否保證返回數據列中的路徑? 它適用於我手機中的所有圖片: path始終是路徑,如/storage/0/whatever.jpg ,而uri.toString()與文件方案相同。 盡管如此,圖片很好地可以通過content:// uris來定義,但是我沒有看到它們如何(以及如果)在images表中表示。

  2. 如果沒有,我應該在DATA列中期待什么,以及如何從中獲取Uri?

以上查詢是否保證返回數據列中的路徑?

它應該返回一些東西。 那些“東西”可能無法使用。 例如,映像可能位於可移動存儲上,您無法直接訪問它。

如何從它獲得一個Uri?

你沒有。 你從_ID構造一個Uri

Uri imageUri=
  ContentUris
    .withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
       cursor.getInt(cursor.getColumnIndex(MediaStore.Images.ImageColumns._ID)));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM