1. 程式人生 > >android 系統相簿呼叫,各方式返回的URI總結

android 系統相簿呼叫,各方式返回的URI總結

請求系統相簿有三個Action:

下面會詳細介紹他們在不同版本系統中的測試結果區別:

測試系統:左圖->Android 7.0官方模擬器 ;   右圖-> Android 5.1的flyme 6 魅藍note3
ACTION_OPEN_DOCUMENT 從自帶檔案管理器獲取 >> content://com.android.providers.media.documents/document/image:1385

開啟的是系統的檔案管理器的圖片選擇器(設定了型別“image/*”),沒有相簿選項,也沒有第三方檔案管理器的選項,

紅框中選項返回的URI又不同

Downloads >> content://com.android.providers.media.documents/document/image:52

SDCARD >> content://com.android.externalstorage.documents/document/primary:LOST.DIR/05115.jpg



ACTION_GET_CONTENT 從自帶檔案管理器獲取 >> content://com.android.providers.media.documents/document/image:1365  

ACTION_GET_CONTENT 從相簿或第三方檔案管理器獲取 >> content://media/external/images/media/1254

開啟的是檔案管理器的圖片選擇器,可以選擇圖片(包括最近Recent)

,也可以選擇相簿,也可以切換到第三方檔案管理器中去選擇

紅框中選項返回的URI又不同

Downloads >> content://com.android.providers.media.documents/document/image:52

SDCARD >> content://com.android.externalstorage.documents/document/primary:LOST.DIR/05115.jpg


 ACTION_PICK預設開啟相簿,從相簿獲取 >>content://media/external/images/media/157

在真機中,預設開啟的不一定是系統自帶的相簿,可能有第三方的圖片管理軟體,在選擇列表中有第三方軟體供選擇開啟,但返回的content格式是一樣的


綜上: uri只跟從相簿還是檔案管理器中選擇有關,action決定可選擇的方式(相簿和檔案管理器)

從相簿選擇的好處是可以預覽圖片,從檔案管理器中不能放大預覽


測試系統:android 6.0   華為
ACTION_OPEN_DOCUMENT  自帶檔案管理器 >> content://com.android.providers.media.documents/document/image:147
ACTION_GET_CONTENT 從自帶檔案管理器中選擇 >> content://com.android.providers.media.documents/document/image:185
ACTION_GET_CONTENT 從相簿或第三方檔案管理器中選擇 >> content://media/external/images/media/35144
ACTION_PICK  自帶相簿或第三方相簿 >>  content://media/external/images/media/35144

 測試系統:android 4.2.1  華為
 ACTION_GET_CONTENT  彈出相簿和檔案管理器,供選擇
 ACTION_OPEN_DOCUMENT   直接崩,不能使用,因為4.4及以上才有
 ACTION_PICK  開啟相簿


綜上得出 :
結論一:
ACTION_OPEN_DOCUMENT    僅限4.4及以上使用,開啟檔案管理器
ACTION_GET_CONTENT         4.4以下預設相簿,4.4級以上預設開啟檔案管理器,但是可以在兩種方式中自由切換,包括第三方檔案管理器
ACTION_PICK                           沒有系統限制,開啟相簿


結論二:

從自帶檔案管理器獲取到的uri 格式為:content://com.android.providers.media.documents/document/image:5468
從相簿或第三方軟體獲取到的uri格式為:content://media/external/images/media/5648


 結論三:

 content://media/external/images/media/657  這種格式,轉換成路徑後可以直接用
 content://com.android.providers.media.documents/document/image:5487 這種格式,轉換成路徑後不能直接用,需要提取id。