mah*_*sif 9 permissions android android-studio
我正在尝试创建一个文件。(testipfs文件夹已存在)
File imagesFolder = new File(Environment.getExternalStorageDirectory(), "testipfs");
File photo= new File(imagesFolder, "desktopWallpaper.jpg");
System.out.println("Saving file in "+photo.getAbsolutePath());
if (!photo.exists()) {
try {
photo.createNewFile();
} catch (IOException e) {
System.out.println("Failed to create photo");
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
但出现错误操作不允许。
I/System.out: Saving file in /storage/emulated/0/testipfs/desktopWallpaper.jpg
I/System.out: Failed to create photo
W/System.err: java.io.IOException: Operation not permitted
W/System.err: at java.io.UnixFileSystem.createFileExclusively0(Native Method)
at java.io.UnixFileSystem.createFileExclusively(UnixFileSystem.java:317)
at java.io.File.createNewFile(File.java:1008)
at com.example.ipfs.MainActivity.SavePhotoTask(MainActivity.java:49)
at com.example.ipfs.MainActivity.onCreate(MainActivity.java:112)
Run Code Online (Sandbox Code Playgroud)
我在清单文件中添加了权限,如下所示
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
小智 11
我期待您在 Android 11 中测试您的应用程序,在 Android 11 中事情发生了变化......您必须请求此许可
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
Run Code Online (Sandbox Code Playgroud)
在你的 MainActivity 中
if (Build.VERSION.SDK_INT >= 30){
if (!Environment.isExternalStorageManager()){
Intent getpermission = new Intent();
getpermission.setAction(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
startActivity(getpermission);
}
}
Run Code Online (Sandbox Code Playgroud)
基本上,这只是一个意图,它将要求用户进行设置以授予我们权限,这在 android 11 中是必要的,如果您只是请求读取和写入权限,那么您的应用程序仅对设备中的文件具有只读访问权限
requestLegacyExternalStorage如果您使用的是 Android 10 或更高版本,请尝试在 Manifest.xml 文件中添加。
<application
...
android:requestLegacyExternalStorage="true">
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11769 次 |
| 最近记录: |