獲取到file的對象以後,調用 createNewFile 方法嘗試在指定目錄下生成一個文件並往文件中寫入內容,一樣的方法以前在android9及之前版本都沒問題,在網上查找了以後基本都指向了權限問題。android
後經查找網上蠻多介紹這個問題的,android Q對於文件讀寫引入了新特性,在這個版本中,READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE均受到了限制,沒法再像以前的版本直接獲取到文件。若是但願恢復以前的權限邏輯,能夠在manifest文件中設置:app
android:requestLegacyExternalStorage="true"
便可解決(但不肯定這種方法是否是臨時的方法,有可能後面谷歌會幹掉這種方式也說不定)。ui
另外,還能夠經過StorageManager的getPrimaryStorageVolume().createOpenDocumentTreeIntent()方法來進行操做,這個方法沒有辦法經過File類來操做文件,可是可使用相似的DocumentFilespa
1 <application 2 android:sharedUserId="android.uid.system" 3 android:allowBackup="true" 4 android:icon="@mipmap/ic_launcher" 5 android:label="@string/app_name" 6 android:roundIcon="@mipmap/ic_launcher_round" 7 android:supportsRtl="true" 8 android:requestLegacyExternalStorage="true" 9 android:theme="@style/AppTheme">
而後從新編譯apk,安裝打開apk,正常在指定目錄下生成了對應文件code