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