Android利用ContentProvider獲取本地數(shù)據(jù)的方法
上一篇,我們講到ContentProvider的主要功能是,提供共享數(shù)據(jù)給其他應(yīng)用使用。在Android系統(tǒng)內(nèi)部,同樣提供了共享數(shù)據(jù),查看 android.provider 包下,發(fā)現(xiàn)有以下的共享數(shù)據(jù)
- 本地多媒體(圖片、音視頻等)
- 通訊錄聯(lián)系人
- 通話記錄
- 短信記錄
- ...
當(dāng)然,這些數(shù)據(jù)必須通過用戶授權(quán)后才可以調(diào)用,所以在調(diào)用前請申請對應(yīng)的權(quán)限(6.0系統(tǒng)以上)
獲取數(shù)據(jù)
getContentResolver()的查詢方法
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
- projection 查詢結(jié)果需要哪一些屬性,null的時候返回所有
- selection 查詢條件
- selectionArgs 對應(yīng)查詢條件的參數(shù)
- sortOrder 排列條件
以圖片為例子
如果你不知道有哪些字段,可以通過<code>MediaStore.Images.ImageColumns</code>查到所有字段,你也可以通過以下方式獲取所有的字段
String [] columnNames = mCursor.getColumnNames();
正確姿勢
//圖片類型的Uri路徑 final Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; //按照圖片修改時間,篩選出jpeg和png類型的圖片 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ù)量可能會很大,建議將查詢等操作放到子線程進行,避免阻塞主線程
利用ContentProvider,我們既可以獲取本地的圖片,實現(xiàn)我們自定義的選圖功能,可以獲取通訊錄,實現(xiàn)自定義的聯(lián)系人界面,也可以獲取短信記錄,完成對應(yīng)的頁面功能效果。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android使用ContentProvider初始化SDK庫方案小結(jié)
- 基于Android FileProvider 屬性配置詳解及FileProvider多節(jié)點問題
- Android ContentProvider實現(xiàn)手機聯(lián)系人讀取和插入
- Android7.0行為變更之適配File Provider的方法
- Android7.0中關(guān)于ContentProvider組件詳解
- Android 中自定義ContentProvider與ContentObserver的使用簡單實例
- Android 中ContentProvider的實例詳解
- Android控件AppWidgetProvider使用方法詳解
- Android編程之桌面小部件AppWidgetProvider用法示例
- Android實現(xiàn)花瓣飄落效果的步驟
相關(guān)文章
Android中使用Matrix控制圖形變換和制作倒影效果的方法
這篇文章主要介紹了Android中使用Matrix控制圖形變換和制作倒影效果的方法,用Matrix來作矩陣變化十分強大,文中的制作倒影的例子便是一個十分巧妙的運用,需要的朋友可以參考下2016-04-04Android ServiceManager的啟動和工作原理
這篇文章主要介紹了Android ServiceManager的啟動和工作原理,幫助大家更好的理解和學(xué)習(xí)使用Android開發(fā),感興趣的朋友可以了解下2021-03-03Android ViewPager實現(xiàn)Banner循環(huán)播放
這篇文章主要為大家詳細(xì)介紹了Android ViewPager實現(xiàn)Banner循環(huán)播放,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-09-09Android開發(fā)之搜索框SearchView用法示例
這篇文章主要介紹了Android開發(fā)之搜索框SearchView用法,結(jié)合實例形式分析了Android搜索框SearchView的基本功能、用法及相關(guān)操作注意事項,需要的朋友可以參考下2019-03-03Android視圖控件架構(gòu)分析之View、ViewGroup
這篇文章主要為大家詳細(xì)介紹了Android視圖控件架構(gòu)分析之View、ViewGroup,感興趣的朋友可以參考一下2016-05-05