问题描述
我正在尝试将文本(“ hello!”)保存到存储在外部SD卡上的文件test.txt中。每次尝试时,都会出现拒绝访问异常。我怎么了预先感谢您的任何建议。 ps。从外部SD卡读取test.txt可以。另外,我手动检查了该应用程序是否有权访问存储(已经检查了该应用程序的权限属性),但是,每次写入都失败。
更新:我正在使用: 编译版本29 targetSdkVersion 29 Android Studio 4.1
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.media.AudioManager;
import android.media.ToneGenerator;
import android.os.Build;
import android.os.Bundle;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
String SD_path = "/storage/1619-0D07/test/test.txt";
String string_to_save = "hello!";
File file;
file = new File(SD_path);
byte buffer[] = new byte[0];
try {
buffer = string_to_save.getBytes("UTF-8");
} catch (Exception e) {
String msg = e.getMessage();
}
try {
FileOutputStream fileOut = new FileOutputStream(file);
fileOut.write(buffer);
fileOut.close();
} catch (Exception e) {
String msg = e.getMessage();
}
}
}```
``` <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.askforum">
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />```
解决方法
步骤1:在清单中授予权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
第2步:在Android Manifest中编写 provider
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths" />
</provider>
第3步:在名为 provider_paths.xml 的XML文件夹中创建文件并编写
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path
name="files_root"
path="Android/data/${applicationId}" />
<external-path
name="external_files"
path="." />
</paths>