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獲得文件路徑

   

 1     string  myImageUrl = "content://media/external/images/media/***";
 2     Uri uri = Uri.parse(myImageUrl);
 3     
 4 
 5     String[] proj = { MediaStore.Images.Media.DATA };   
 6     Cursor actualimagecursor = this.ctx.managedQuery(uri,proj,null,null,null);  
 7     int actual_image_column_index = actualimagecursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);   
 8     actualimagecursor.moveToFirst();   
 9     
10 
11     String img_path = actualimagecursor.getString(actual_image_column_index);  
12     File file = new File(img_path);
13     Uri fileUri = Uri.fromFile(file);

 

 

  2.由文件路徑得到URI

  

 1             Uri mUri = Uri.parse("content://media/external/images/media"); 
 2             Uri mImageUri = null;
 3 
 4             Cursor cursor = managedQuery(
 5                     MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null,
 6                     null, MediaStore.Images.Media.DEFAULT_SORT_ORDER);
 7             cursor.moveToFirst();
 8 
 9             while (!cursor.isAfterLast()) {
10                 String data = cursor.getString(cursor
11                         .getColumnIndex(MediaStore.MediaColumns.DATA));
12                 if (picPath.equals(data)) {
13                     int ringtoneID = cursor.getInt(cursor
14                             .getColumnIndex(MediaStore.MediaColumns._ID));
15                     mImageUri = Uri.withAppendedPath(mUri, ""
16                             + ringtoneID);
17                     break;
18                 }
19                 cursor.moveToNext();
20             }

 


免責聲明!

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



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