2015-04-16 71 views
3

正如documentation提到的,WRITE_EXTERNAL_STORAGE權限不應該從API級別19.因此開始一個要求,我寫這清單:KitKat仍然需要WRITE_EXTERNAL_STORAGE?

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" 
       android:maxSdkVersion="18"/> 

但是,運行我的應用程序時使用谷歌地圖V2,因此需要訪問外部存儲,我得到一個SecurityException

java.lang.SecurityException: The Maps API requires the additional following permissions to be set in the AndroidManifest.xml to ensure a correct behavior: 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

電話我運行應用程序是奇巧(4.4),這是API級別19.我的理解,應用程序應該能夠未經許可即可正常運行。無論如何,爲什麼我會得到這個錯誤?

+0

看看這篇文章:http://stackoverflow.com/questions/20328082/require-permission-only-for-older-android-versions-maxsdkversion-does-not-work – Willis

回答

2

的WRITE_EXTERNAL_STORAGE權限不應該是,如果您使用的是Context方法,如getExternalFilesDir(),以獲得在外部存儲上的特異性針對您的標準位置從API級別只有19

開始要求應用程序。對於其他位置,例如由Environment上的方法報告的路徑,您仍需要該權限。

或者引用the documentation that you linked to

例如,採用Android 4.4(API級別19)開始,它不再是必要的,當你的應用程序想要寫自己的您的應用程序請求WRITE_EXTERNAL_STORAGE許可外部存儲器上的應用程序特定目錄(由getExternalFilesDir()提供的目錄)。

另外,歡迎第三方庫爲了自己的理由要求您擁有此權限。

爲什麼我會收到錯誤?

看起來像MapsV2正在驗證您是否具有權限作爲其設置過程的一部分。這是MapsV2的特權。也許他們希望在不需要此許可的有限領域之外使用外部存儲。也許他們沒有更新他們代碼中的權限檢查。作爲封閉源代碼的MapsV2很難分析這類事情。

0

按照WRITE_EXTERNAL_STORAGE文檔(重點礦山):

API級別19開始,此權限不需要 讀/寫文件由 getExternalFilesDir返回您的應用程序特定的目錄(字符串)和getExternalCacheDir()。

的谷歌地圖API的使用大概在外部存儲是特定於應用程序的目錄,因此你需要包括對所有API級別的權限。