android的contentprovider多媒体,Android利用ContentProvider获取本地数据的方法
上一篇,我們講到ContentProvider的主要功能是,提供共享數據給其他應用使用。在Android系統內部,同樣提供了共享數據,查看 android.provider 包下,發現有以下的共享數據
本地多媒體(圖片、音視頻等)
通訊錄聯系人
通話記錄
短信記錄
...
當然,這些數據必須通過用戶授權后才可以調用,所以在調用前請申請對應的權限(6.0系統以上)
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},1000);
獲取數據
getContentResolver()的查詢方法
query(@RequiresPermission.Read @NonNull Uri uri,
@Nullable String[] projection, @Nullable String selection,
@Nullable String[] selectionArgs, @Nullable String sortOrder)
其中參數的含義
uri 目標的uri路徑
圖片為 MediaStore.Images.Media.EXTERNAL_CONTENT_URI (外部)以及 MediaStore.Images.Media.INTERNAL_CONTENT_URI (內部)
視頻為 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 查詢結果需要哪一些屬性,null的時候返回所有
selection 查詢條件
selectionArgs 對應查詢條件的參數
sortOrder 排列條件
以圖片為例子
如果你不知道有哪些字段,可以通過MediaStore.Images.ImageColumns查到所有字段,你也可以通過以下方式獲取所有的字段
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
}
}
由于數據量可能會很大,建議將查詢等操作放到子線程進行,避免阻塞主線程
利用ContentProvider,我們既可以獲取本地的圖片,實現我們自定義的選圖功能,可以獲取通訊錄,實現自定義的聯系人界面,也可以獲取短信記錄,完成對應的頁面功能效果。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
總結
以上是生活随笔為你收集整理的android的contentprovider多媒体,Android利用ContentProvider获取本地数据的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: unity实战:狂暴机器人游戏教程(下篇
- 下一篇: 关于ContentProviderCon