Android 6.0以后的版本報錯:open failed: EACCES (Permission denied)


Android 6.0以后的版本報錯:open failed: EACCES (Permission denied)

在開發項目中,遇見要進行文件操作,遇見Caused by: android.system.ErrnoException: open failed: EACCES (Permission denied)錯誤 .

此問題共分為三步來解決:

首先來說下聯網和讀寫文件問題:

1.添加權限(注意:6.0后的版本即使添加了權限還是會報錯,但是權限聲明是必須要加的)

AndroidManifest.xml中添加權限:

 <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
2.添加了聯網權限后還是連不上網,或者聯網拒絕,這里四種解決辦法:

a.APP改用https

b.targetSdkVersion 降到27以下

c.AndroidManifest.xml中的application加入:

<application
        android:usesCleartextTraffic="true" //這個是需要加入的內容,可以解決聯網訪問路徑問題 ..... >

d.c中比較復雜的寫法:在res下創建xml文件夾,在xml文件夾中在建立network_security_config.xml文件,內容如下:

network_security_config.xml:

<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config cleartextTrafficPermitted="true" /> </network-security-config>

然后在AndroidManifest.xml的application標簽中加入:

android:networkSecurityConfig="@xml/network_security_config"

3.此時還是會報無法存儲的問題,這里是因為6.0后的權限需要手動申請,我們需要在MainActivity中加入如下的代碼:

 private  final int REQUEST_EXTERNAL_STORAGE = 1; private String[] PERMISSIONS_STORAGE = { Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE }; public void verifyStoragePermissions(Activity activity) { // Check if we have write permission int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE); if (permission != PackageManager.PERMISSION_GRANTED) { // We don't have permission so prompt the user ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE, REQUEST_EXTERNAL_STORAGE); } }

然后我們在onCreate方法中引用即可:

verifyStoragePermissions(this);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM