SQL-android uri的使用(轉載)

來源:互聯網
上載者:User

標籤:

今天在操作android的時候,用到了資料庫的訪問,就在網上學習了一下關於資料庫的知識。其中訪問資料庫就是通過uri進行的,所以這裡總結下android uri的應用。

以下內容參考http://www.cnblogs.com/lingyun1120/archive/2012/04/18/2455212.html

通用資源標誌符(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  開啟 images 列表

具體操作如下

[email protected]_Y100:/data/data # cd com.android.providers.media[email protected]_Y100:/data/data/com.android.providers.media # lscachedatabaseslibshared_prefsdatabases/                                                                    <[email protected]_Y100:/data/data/com.android.providers.media/databases # lsexternal.dbexternal.db-shmexternal.db-walinternal.dbinternal.db-shminternal.db-wale3 external.db                                                                <SQLite version 3.7.11 2012-03-20 11:35:50Enter ".help" for instructionsEnter SQL statements terminated with a ";"sqlite> .tablesalbum_art              audio_genres           log                  album_info             audio_genres_map       search               albums                 audio_genres_map_noid  searchhelpertitle    android_metadata       audio_meta             thumbnails           artist_info            audio_playlists        video                artists                audio_playlists_map    videothumbnails      artists_albums_map     files                audio                  images               sqlite> select * from images;84|/storage/sdcard0/DCIM/Camera/IMG_20150101_021647.jpg|1207033|IMG_20150101_021647.jpg|image/jpeg|IMG_20150101_021647|1420078609|1420078609||||||1420078607883|0|2289287690547999733|1509922574|Camera|1872|3328|||||||||||0|0|-1|0|0|0|0|0|0|0sqlite> .schema imagesCREATE VIEW images AS SELECT _id,_data,_size,_display_name,mime_type,title,date_added,date_modified,description,picasa_id,isprivate,latitude,longitude,datetaken,orientation,mini_thumb_magic,bucket_id,bucket_display_name,width,height,is_drm,drm_content_uri,drm_offset,drm_dataLen,drm_rights_issuer,drm_content_name,drm_content_description,drm_content_vendor,drm_icon_uri,drm_method,stereo_type,mpo_type,convergence,group_id,group_index,focus_value_high,focus_value_low,is_best_shot,group_count,is_mtk_3d FROM files WHERE media_type=1;sqlite> 

我們把表格提取出來,如下

_id,_data,_size,_display_name,mime_type,title,date_added,date_modified,description,picasa_id,isprivate,latitude,longitude,datetaken,orientation,mini_thumb_magic,bucket_id,bucket_display_name,width,height,is_drm,drm_content_uri,drm_offset,drm_dataLen,drm_rights_issuer,drm_content_name,drm_content_description,drm_content_vendor,drm_icon_uri,drm_method,stereo_type,mpo_type,convergence,group_id,group_index,focus_value_high,focus_value_low,is_best_shot,group_count,is_mtk_3d FROM files WHERE media_type=1;84|/storage/sdcard0/DCIM/Camera/IMG_20150101_021647.jpg|1207033|IMG_20150101_021647.jpg|image/jpeg|IMG_20150101_021647|1420078609|1420078609||||||1420078607883|0|2289287690547999733|1509922574|Camera|1872|3328|||||||||||0|0|-1|0|0|0|0|0|0|0 

 

可以看到檔案路徑(_data)和Uri的標示ID(_id)的對應關係。

  代碼中使用

   1.從URI獲得檔案路徑

 

     string  myImageUrl = "content://media/external/images/media/***";//字串轉化為uri      Uri uri = Uri.parse(myImageUrl);//這個好像是訪問資料庫必須的,至於proj有什麼用,暫時不知道            String[] proj = { MediaStore.Images.Media.DATA };         Cursor actualimagecursor = this.ctx.managedQuery(uri,proj,null,null,null); //獲得所在列的id       int actual_image_column_index = actualimagecursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);         actualimagecursor.moveToFirst();//得到id對應的路徑       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();             }

 

下面附上自己用到的一個執行個體,它多少反映了資料庫的操作吧

代碼如下

 } else if ("downloads".equals(mFileUri.getAuthority())) {                    String[] proj={                        "_data",                        "mimetype"};                    Cursor cursor = managedQuery( mFileUri,                        proj,                        null,                        null,                        null);                    if ( null == cursor ) {                         return 2;                    }                       int pathColumnId = cursor.getColumnIndexOrThrow("_data");                    int mimeColumnId = cursor.getColumnIndexOrThrow("mimetype");                    if(!cursor.moveToFirst()){                        return 2;                    }                        mFilePath = cursor.getString(pathColumnId);                     mMimeType = cursor.getString(mimeColumnId);                    android.util.Log.e("zhangshuli", "mFilePath==更改3"+mFilePath+mMimeType);                }               }   

 

列印結果

 

mFilePath==更改3/storage/sdcard0/Download/IMG_20150402_124553.jpgimage/jpeg

 

SQL-android uri的使用(轉載)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.