android文件选择器_Android存储空间的最佳实践(上)
分區(qū)存儲(chǔ)
https://developer.android.google.cn/training/data-storage#scoped-storage
處理媒體文件
這部分內(nèi)容描述了處理媒體文件 (如視頻、圖片、音頻文件) 的一些常見(jiàn)用例,并概要說(shuō)明了應(yīng)用可以使用的方法。我們制作了一個(gè)簡(jiǎn)單的圖片,列出了每種用例以及其在不同系統(tǒng)版本的實(shí)踐總結(jié):展示多個(gè)文件夾中的圖片和視頻文件使用 query() API 查詢媒體集合。您可以通過(guò)調(diào)整 projection、 selection、 selectionArgs 與 sortOrder 參數(shù)來(lái)對(duì)媒體文件進(jìn)行過(guò)濾和排序。
- query()https://developer.android.google.cn/reference/android/content/ContentResolver#query(android.net.Uri,%20java.lang.String%5B%5D,%20java.lang.String,%20java.lang.String%5B%5D,%20java.lang.String,%20android.os.CancellationSignal)
- 查詢媒體集合https://developer.android.google.cn/training/data-storage/shared/media#query-collection
使用 "請(qǐng)求應(yīng)用權(quán)限"?一文中描述的最佳實(shí)踐來(lái)請(qǐng)求 READ_EXTERNAL_STORAGE 權(quán)限。
使用 MediaColumns.DATA 中的值來(lái)檢索媒體文件,其中包含了磁盤(pán)中媒體文件的絕對(duì)文件系統(tǒng)路徑。
- 請(qǐng)求應(yīng)用權(quán)限https://developer.android.google.cn/training/permissions/requesting
- READ_EXTERNAL_STORAGEhttps://developer.android.google.cn/reference/android/Manifest.permission#READ_EXTERNAL_STORAGE
- MediaColumns.DATAhttps://developer.android.google.cn/reference/kotlin/android/provider/MediaStore.MediaColumns#data
如果您的應(yīng)用使用了分區(qū)存儲(chǔ),可以遵循媒體存儲(chǔ)指南中的 "照片中的位置信息"?部分進(jìn)行操作。
注意:?就算您選擇停用分區(qū)存儲(chǔ),在使用?MediaStoreAPI?訪問(wèn)圖像并讀取未修改的位置信息時(shí),您也需要請(qǐng)求?ACCESS_MEDIA_LOCATION權(quán)限。- 照片中的位置信息https://developer.android.google.cn/training/data-storage/shared/media#location-info-photos
- MediaStorehttps://developer.android.google.cn/reference/android/provider/MediaStore
- ACCESS_MEDIA_LOCATIONhttps://developer.android.google.cn/reference/android/Manifest.permission#ACCESS_MEDIA_LOCATION
您需要根據(jù)運(yùn)行應(yīng)用的 Android 版本來(lái)整合邏輯。
在 Android 11 上運(yùn)行使用以下方法:
使用 MediaStore.createWriteRequest() 或 MediaStore.createTrashRequest() 為應(yīng)用的寫(xiě)入或刪除請(qǐng)求創(chuàng)建待定 intent,然后通過(guò)調(diào)用該 intent 提示用戶授予修改一組文件的權(quán)限。
評(píng)估用戶的響應(yīng):
如果獲得了權(quán)限,執(zhí)行修改或刪除操作;
如果未能獲得權(quán)限,向用戶解釋為什么您的應(yīng)用需要此權(quán)限。
- MediaStore.createWriteRequest()https://developer.android.google.cn/reference/android/provider/MediaStore#createWriteRequest(android.content.ContentResolver,%20java.util.Collection%3Candroid.net.Uri%3E)
- MediaStore.createTrashRequest()https://developer.android.google.cn/reference/android/provider/MediaStore#createTrashRequest(android.content.ContentResolver,%20java.util.Collection%3Candroid.net.Uri%3E,%20boolean)
- 執(zhí)行批量操作https://developer.android.google.cn/preview/privacy/storage#media-batch-operations
在 Android 10 上運(yùn)行
如果您的應(yīng)用目標(biāo) API 為 Android 10 (API level 29),請(qǐng)停用分區(qū)存儲(chǔ)并繼續(xù)使用 Android 9 及更低版本所使用的方法來(lái)執(zhí)行這類操作。- 請(qǐng)停用分區(qū)存儲(chǔ)https://developer.android.google.cn/training/data-storage/use-cases#opt-out-scoped-storage
在 Android 9 及更低版本上運(yùn)行
使用以下方法:
使用 "請(qǐng)求應(yīng)用權(quán)限" 一文中描述的最佳實(shí)踐來(lái)請(qǐng)求 WRITE_EXTERNAL_STORAGE 權(quán)限。
使用 MediaStore API 來(lái)修改和刪除媒體文件。
- WRITE_EXTERNAL_STORAGEhttps://developer.android.google.cn/reference/android/Manifest.permission#WRITE_EXTERNAL_STORAGE
導(dǎo)入已存在的單個(gè)圖片
如果您想要導(dǎo)入一張已存在的圖片 (例如將照片用于用戶個(gè)人資料),您的應(yīng)用可以使用自己的 UI 或者系統(tǒng)圖片選擇器來(lái)執(zhí)行這一操作。提供您自己的用戶界面
使用以下方法:
使用 "請(qǐng)求應(yīng)用權(quán)限"?一文中描述的最佳實(shí)踐來(lái)請(qǐng)求 READ_EXTERNAL_STORAGE 權(quán)限。
使用 query() API 查詢媒體集合。
將結(jié)果顯示到您的 UI 上。
使用系統(tǒng)選擇器
使用 ACTION_GET_CONTENTintent 來(lái)要求用戶選擇要導(dǎo)入的圖片。如果您希望過(guò)濾系統(tǒng)選擇器向用戶展示的圖片類型,可以使用 setType()或 EXTRA_MIME_TYPES。ACTION_GET_CONTENT
https://developer.android.google.cn/reference/android/content/Intent#ACTION_GET_CONTENT
setType()
https://developer.android.google.cn/reference/android/content/Intent#setType(java.lang.String)
EXTRA_MIME_TYPES
https://developer.android.google.cn/reference/android/content/Intent#EXTRA_MIME_TYPES
拍攝單張圖片
當(dāng)您想要拍攝一張圖片并用于您的應(yīng)用時(shí) (例如將照片用于用戶個(gè)人資料),使用 ACTION_IMAGE_CAPTUREintent 來(lái)要求用戶使用設(shè)備的相機(jī)拍攝一張照片。系統(tǒng)會(huì)將拍攝的照片存儲(chǔ)于?MediaStore.Images表中。?- ACTION_IMAGE_CAPTUREhttps://developer.android.google.cn/reference/android/provider/MediaStore#ACTION_IMAGE_CAPTURE
- MediaStore.Imageshttps://developer.android.google.cn/reference/android/provider/MediaStore.Images
與其他應(yīng)用共享媒體文件
使用 insert()方法將記錄直接加入 MediaStore。詳細(xì)信息,可以參閱媒體存儲(chǔ)指南中 "添加項(xiàng)目" 部分。insert()
https://developer.android.google.cn/reference/android/content/ContentResolver#insert(android.net.Uri,%20android.content.ContentValues)
添加項(xiàng)目
https://developer.android.google.cn/training/data-storage/shared/media#add-item
與特定應(yīng)用共享媒體文件
使用 Android FileProvider組件,相關(guān)內(nèi)容在 "設(shè)置文件分享"?指南中有描述。設(shè)置文件分享
https://developer.android.google.cn/training/secure-file-sharing/setup-sharing
從代碼或依賴庫(kù)中使用直接文件路徑訪問(wèn)文件
您需要根據(jù)運(yùn)行應(yīng)用的 Android 版本來(lái)整合邏輯。在 Android 11 上運(yùn)行
使用以下方法:
使用 "請(qǐng)求應(yīng)用權(quán)限"?一文中描述的最佳實(shí)踐來(lái)請(qǐng)求 READ_EXTERNAL_STORAGE 權(quán)限。
使用直接文件路徑訪問(wèn)文件。
- 使用原始路徑訪問(wèn)文件https://developer.android.google.cn/preview/privacy/storage#media-files-raw-paths
在 Android 10 上運(yùn)行
如果您的應(yīng)用目標(biāo) API 為 Android 10 (API level 29),請(qǐng)停用分區(qū)存儲(chǔ)并繼續(xù)使用 Android 9 及更低版本所使用的方法來(lái)執(zhí)行這類操作。在 Android 9 及更低版本上運(yùn)行使用以下方法:?數(shù)據(jù)和文件存儲(chǔ)概覽
https://developer.android.google.cn/training/data-storage
Android 存儲(chǔ)用例和最佳做法 - Android 官方中文文檔
https://developer.android.google.cn/training/data-storage/use-cases?hl=zh-CN
? 推薦閱讀:
??Android自定義View基礎(chǔ)
? Android自定義View-視圖動(dòng)畫(huà)
??Android自定義View-屬性動(dòng)畫(huà)
? Android自定義View-路徑動(dòng)畫(huà)
??Android自定義View-SVG動(dòng)畫(huà)
歡迎關(guān)注微信公眾號(hào):Android技術(shù)堆棧總結(jié)
以上是生活随笔為你收集整理的android文件选择器_Android存储空间的最佳实践(上)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: postgresql 创建用户_Liun
- 下一篇: python可以调试吗_调试-有什么好的