Android 文件路徑(/mnt/sdcard/...)、Uri(content://media/external/...)


一、URI

 通用資源標志符(Universal Resource Identifier, 簡稱"URI")。
  Uri代表要操作的數據,Android上可用的每種資源 - 圖像、視頻片段等都可以用Uri來表示。
  URI一般由三部分組成:
    訪問資源的命名機制。 
    存放資源的主機名。 
    資源自身的名稱,由路徑表示。 
  Android的Uri由以下三部分組成: "content://"、數據的路徑、標示ID(可選)
  舉些例子,如: 
    所有聯系人的Uri: content://contacts/people
    某個聯系人的Uri: content://contacts/people/5
    所有圖片Uri: content://media/external
    某個圖片的Uri:content://media/external/images/media/4

二、內部保存

首先我們來看一下android是如何管理多媒體文件(音頻、視頻、圖片)的信息。通過DDMS,我們在/data/data/com.android.providers.media下找到數據庫文件

  

  打開external.db文件進一步查看:在media表格下,可以看到文件路徑(_data)和Uri的標示ID(_id)的對應關系。

  

三、相互轉換

1.從URI獲得文件路徑

     string  myImageUrl = "content://media/external/images/media/***";
        Uri uri = Uri.parse(myImageUrl); 
        String[] proj = { MediaStore.Images.Media.DATA };   
        Cursor actualimagecursor = this.ctx.managedQuery(uri,proj,null,null,null);  
        int actual_image_column_index = actualimagecursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);   
        actualimagecursor.moveToFirst();      
        String img_path = actualimagecursor.getString(actual_image_column_index);  
       File file = new File(img_path);
       Uri fileUri = Uri.fromFile(file);

2.由文件路徑得到URI

            Uri mUri = Uri.parse("content://media/external/images/media"); 
              Uri mImageUri = null;
               Cursor cursor = managedQuery(                  MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null,
                       null, MediaStore.Images.Media.DEFAULT_SORT_ORDER);
                cursor.moveToFirst(); 
                while (!cursor.isAfterLast()) {
                 String data = cursor.getString(cursor                         .getColumnIndex(MediaStore.MediaColumns.DATA));
                 if (picPath.equals(data)) {
                     int ringtoneID = cursor.getInt(cursor                            .getColumnIndex(MediaStore.MediaColumns._ID));
                      mImageUri = Uri.withAppendedPath(mUri, ""
                           + ringtoneID);
                    break;
              }
                   cursor.moveToNext();
           }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM