Android創(chuàng)建文件時出現(xiàn)java.io.IOException:?Operation?not?permitted異常的解決方法
一、android 6.0
6.0之前是不需要動態(tài)申請權(quán)限的,直接在manifest.xml中申請即可以正常使用。
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
二、安卓10,SDK=29
安卓10開始,安卓繼續(xù)加強了限制,如果需要讀寫SD卡,還需要額外的進行申請requestLegacyExternalStorage申明。
<application android:name=".common.base.BaseApplication" android:allowBackup="true" android:icon="@mipmap/logo" android:label="@string/app_name" android:largeHeap="true" android:requestLegacyExternalStorage="true" //添加這一行 android:roundIcon="@mipmap/logo" android:supportsRtl="true" android:theme="@style/AppTheme" android:usesCleartextTraffic="true" tools:replace="android:icon,android:roundIcon">
三、安卓11,SDK=30
安卓11的時候繼續(xù)強化對SD卡讀寫的管理,引入了MANAGE_EXTERNAL_STORAGE權(quán)限,而之前的WRITE_EXTERNAL_STORAGE已經(jīng)失效了。
并且MANAGE_EXTERNAL_STORAGE權(quán)限只能跳轉(zhuǎn)設(shè)置頁面申請。
四、安卓13,SDK=33
android 13上,取消了android.permission.WRITE_EXTERNAL_STORAGE權(quán)限,只需要申android.permission.MANAGE_EXTERNAL_STORAGE權(quán)限。
以下是我遇到的問題分析:
創(chuàng)建文件時,一直報Operation not permitted異常,沒有權(quán)限。但是我在代碼里把以上權(quán)限完全開啟了。而且android 11雖然開啟了強制分區(qū)存儲,但是只針對 targetSDK>=30的情況,而我的應(yīng)用targetSDK版本為29。
后來發(fā)現(xiàn)是我的文件名使用當(dāng)前時間來命名(2023-2-10 15:38:45),而當(dāng)前時間里帶有 “:”,導(dǎo)致文件創(chuàng)建權(quán)限不足。
許多的字符都屬于公共空間文件的不合法字符(如上圖),但是在私有空間是沒有這個問題的??赡苁怯捎谠诠锌臻g和私有空間訪問走的是兩套機制。公有空間會走MediaStore,私有空間并不會。
我們在android 11系統(tǒng)的手機上,手動創(chuàng)建文件時,文件名也不能包含這些字符。android 10 之前就沒有發(fā)現(xiàn)這個問題。
所以問題的解決方法有兩種:
1、把文件放到私有空間(即內(nèi)存)中
2、修改文件名,避免特殊字符
總結(jié)
到此這篇關(guān)于Android創(chuàng)建文件時出現(xiàn)java.io.IOException: Operation not permitted異常解決的文章就介紹到這了,更多相關(guān)java.io.IOException: Operation not permitted異常內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 解決springboot報錯Failed?to?parse?multipart?servlet?request;?nested?exception?is?java.io.IOException問題
- 什么情況下會出現(xiàn)java.io.IOException?:?Broken?pipe這個錯誤以及解決辦法
- 解決Spring調(diào)用Feign報錯:java.io.IOException:Incomplete output stream問題
- java.io.IOException:?UT010029:?Stream?is?closed異常分析及解決
- java.io.IOException:你的主機中的軟件中止了一個已建立的連接踩坑實戰(zhàn)
- 解決Java中的java.io.IOException: Broken pipe問題
- AndroidApk混淆編譯時,報告java.io.IOException...錯誤解決辦法
- JSP上傳圖片產(chǎn)生 java.io.IOException: Stream closed異常解決方法
- Caused by: java.io.IOException: DerInputStream.getLength(): lengthTag=111
相關(guān)文章
Android Studio 3.6 正式版終于發(fā)布了,快來圍觀
Android Studio 3.6 正式版終于發(fā)布了,值得興奮呀,畢竟 3.5 大版本更新也已經(jīng)差不多半年了,撒花撒花!這次更新又更新了什么呢?快來跟隨小編一起看看吧2020-02-02Android TextView實現(xiàn)多文本折疊、展開效果
這篇文章主要為大家詳細介紹了Android TextView實現(xiàn)多文本折疊、展開效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05解決 INSTALL FAILED CONFLICTING PROVIDER的問題方法
這篇文章主要介紹了解決 INSTALL FAILED CONFLICTING PROVIDER的問題方法的相關(guān)資料,需要的朋友可以參考下2017-02-02Android 中使用EditText 點擊全選再次點擊取消全選功能
這篇文章主要介紹了Android 中使用EditText 點擊全選再次點擊取消全選功能,非常不錯,具有參考借鑒價值,需要的朋友參考下吧2016-12-12Android自定義View實現(xiàn)兩種二維碼的掃描效果
這篇文章主要為大家詳細介紹了Android如何自定義View實現(xiàn)兩種二維碼的掃描效果,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01Android StepView實現(xiàn)物流進度效果
這篇文章主要為大家詳細介紹了Android StepView實現(xiàn)物流進度效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-05-05解析Android中實現(xiàn)滑動翻頁之ViewFlipper的使用詳解
有一些場景,我們需要向用戶展示一系列的頁面。比如我們正在開發(fā)一個看漫畫的應(yīng)用,可能就需要向用戶展示一張一張的漫畫圖片,用戶使用手指滑動屏幕,可以在前一幅漫畫和后一幅漫畫之間切換。這個時候ViewFlipper就是一個很好的選擇2013-05-05