2016-09-18 100 views
1

Wikipedia says加載擴展名爲.gpx的文件,GPX文件的MIME類型爲application/gpx+xml。所以我用下面的代碼:無法通過存儲訪問框架

startActivityForResult(
    new Intent(Intent.ACTION_OPEN_DOCUMENT) 
     .addCategory(Intent.CATEGORY_OPENABLE) 
     .setType("application/gpx"), 
     READ_GPX_FILE_REQUEST_CODE 
); 

也試過這樣:

startActivityForResult(
    new Intent(Intent.ACTION_OPEN_DOCUMENT) 
     .addCategory(Intent.CATEGORY_OPENABLE) 
     .setType("application/gpx+xml"), 
     READ_GPX_FILE_REQUEST_CODE 
); 

而且作爲最後的手段我試圖用Intent#setTypeAndNormalize(String)方法。沒有運氣 - 當文件選擇器對話框啓動時,所有帶有.gpx擴展名的文件都有灰色,即它們不可選。在我的代碼中是否存在一些問題,或者SAF的Intent有一些可以使用的預配置MIME類型集,並且application/gpx+xml不屬於這個集?

+1

'「*/*」'會做到這一點。 – greenapps

+1

@greenapps是的,但在這種情況下,我必須編寫額外的代碼來檢查所選文件的MIME類型,以確保當用戶意外選擇音頻文件而不是gpx文件時應用程序不會崩潰。 – aga

回答

2

由文檔提供者決定它提供的文檔的MIME類型。對於一些文檔提供者,他們可能知道來自上游源的文檔MIME類型(例如,提供文檔提供者的電子郵件客戶端可能從電子郵件的MIME頭部獲取MIME類型的附件)。對於其他任何事情,他們傾向於依靠MimeTypeMap,而這又依賴於名爲MimeUtils的內部類。

MimeUtils對GPX沒有任何幫助,at least through Android 7.0

所以,你需要採取greenapps的建議,使用*/*,並準備處理解析錯誤。

FWIW,我提交a feature request以獲得GPX添加到MimeUtils

+0

好的,謝謝你的回答。 – aga