欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android利用ContentProvider獲取本地?cái)?shù)據(jù)的方法

 更新時(shí)間:2018年04月24日 14:46:11   作者:YWQalways樂(lè)觀自信愛(ài)  
這篇文章主要介紹了Android利用ContentProvider獲取本地?cái)?shù)據(jù)的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

上一篇,我們講到ContentProvider的主要功能是,提供共享數(shù)據(jù)給其他應(yīng)用使用。在Android系統(tǒng)內(nèi)部,同樣提供了共享數(shù)據(jù),查看 android.provider 包下,發(fā)現(xiàn)有以下的共享數(shù)據(jù)

  1. 本地多媒體(圖片、音視頻等)
  2. 通訊錄聯(lián)系人
  3. 通話記錄
  4. 短信記錄
  5. ...

當(dāng)然,這些數(shù)據(jù)必須通過(guò)用戶授權(quán)后才可以調(diào)用,所以在調(diào)用前請(qǐng)申請(qǐng)對(duì)應(yīng)的權(quán)限(6.0系統(tǒng)以上)

復(fù)制代碼 代碼如下:
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},1000);

獲取數(shù)據(jù)

getContentResolver()的查詢(xún)方法

query(@RequiresPermission.Read @NonNull Uri uri,
    @Nullable String[] projection, @Nullable String selection,
    @Nullable String[] selectionArgs, @Nullable String sortOrder)

其中參數(shù)的含義

uri 目標(biāo)的uri路徑

圖片為 MediaStore.Images.Media.EXTERNAL_CONTENT_URI (外部)以及 MediaStore.Images.Media.INTERNAL_CONTENT_URI (內(nèi)部)

視頻為 MediaStore.Video.Media.EXTERNAL_CONTENT_URI

音頻為 MediaStore.Audio.Media.EXTERNAL_CONTENT_URI

通訊錄 ContactsContract.Contacts.CONTENT_URI

通話記錄 CallLog.Calls.CONTENT_URI

短信記錄 Telephony.Sms.CONTENT_URI

  1. projection 查詢(xún)結(jié)果需要哪一些屬性,null的時(shí)候返回所有
  2. selection 查詢(xún)條件
  3. selectionArgs 對(duì)應(yīng)查詢(xún)條件的參數(shù)
  4. sortOrder 排列條件

以圖片為例子

如果你不知道有哪些字段,可以通過(guò)<code>MediaStore.Images.ImageColumns</code>查到所有字段,你也可以通過(guò)以下方式獲取所有的字段

String [] columnNames = mCursor.getColumnNames();

正確姿勢(shì)

//圖片類(lèi)型的Uri路徑
final Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
//按照?qǐng)D片修改時(shí)間,篩選出jpeg和png類(lèi)型的圖片
Cursor mCursor =mContext.getContentResolver()
  .query(uri,null,MediaStore.Images.ImageColumns.MIME_TYPE + "=? or "+ MediaStore.Images.ImageColumns.MIME_TYPE + "=?",
  new String[]{"image/jpeg", "image/png"}, MediaStore.Images.Media.DATE_MODIFIED); 
if(mCursor!=null){

while(mCursor.moveToNext()){

//獲取圖片路徑
String path = mCursor.getString(mCursor
    .getColumnIndex(MediaStore.Images.ImageColumns.DATA));
//獲取修改日期
long date = mCursor.getLong(mCursor
    .getColumnIndex(MediaStore.Images.ImageColumns.DATE_MODIFIED));

//do something
}
}

由于數(shù)據(jù)量可能會(huì)很大,建議將查詢(xún)等操作放到子線程進(jìn)行,避免阻塞主線程

利用ContentProvider,我們既可以獲取本地的圖片,實(shí)現(xiàn)我們自定義的選圖功能,可以獲取通訊錄,實(shí)現(xiàn)自定義的聯(lián)系人界面,也可以獲取短信記錄,完成對(duì)應(yīng)的頁(yè)面功能效果。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論