mkdir() 或 mkdirs() 在 Android API 26 上不工作
mkdir() or mkdirs() not working on Android API 26
以下代码可与其他 API 一起使用,但 26
public static boolean cretaeDir()
{
String dir = Environment.getExternalStoragePublicDirectory(Environment.MEDIA_SHARED).getAbsolutePath();
java.io.File folder = new java.io.File(dir + "/SomeFolderName");
if (!folder.exists()) {
try{
if(folder.mkdir()) {
Log.e("Creating Folder", "Success");
return true;
} else {
Log.e("Creating Folder", "Failed");
return false;
}
} catch(Exception e){
e.printStackTrace();
return false;
}
}else{
return true;
}
}
在有人问之前,是的,权限已被授予并且使用清单文件中存在的权限。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.package.name">
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="com.android.vending.BILLING" />
<!-- Required OpenGL ES 2.0. for Maps V2 -->
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
<application/>
测试设备是三星 S8,运行8.0.0
您没有使用有效的文件夹类型。您必须从以下选项中选择
The type of storage directory to return. Should be one of DIRECTORY_MUSIC, DIRECTORY_PODCASTS, DIRECTORY_RINGTONES, DIRECTORY_ALARMS, DIRECTORY_NOTIFICATIONS, DIRECTORY_PICTURES, DIRECTORY_MOVIES, DIRECTORY_DOWNLOADS, DIRECTORY_DCIM, or DIRECTORY_DOCUMENTS. May not be null.
你的代码应该是这样的
String dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC).getAbsolutePath();
试试这个
File fsd = Environment.getExternalStorageDirectory();
String filePath = fsd.getAbsolutePath() + "/SomeFolderName";
File dir = new File(filePath);
if(dir.isDirectory==false || !dir.exists()){
dir.mkdirs();
}
我已经通过以下方式修复了它,因为我没有其他选择,而且我已经尝试了所有建议的解决方案。也许错误是设备相关的或其他什么,但它与 API 26 无关,因为我已经将我的一个测试设备升级到 API 26 并且旧功能确实有效。
以下代码适用于所有设备。
File file = MyApplication.getInstance().getDir("BUZZ",MODE_PRIVATE);
cacheDir = new File(file.getAbsoluteFile()+File.separator+IMAGE_DIRECTORY_NAME);
快乐编码:-)
好的,所以这对我有用。
RequestPermission
方法,在请求许可时,先询问 WRITE_EXTERNAL_STORAGE
。试一试...
MainActivity.kt
// First permission to be asked
requestPermissions(arrayOf(android.Manifest.permission.WRITE_EXTERNAL_STORAGE), 1)
// Then all other permissions
这适用于所有 API 及 26 岁以上的人。
TBH,我不知道怎么做,但它工作。
以下代码可与其他 API 一起使用,但 26
public static boolean cretaeDir()
{
String dir = Environment.getExternalStoragePublicDirectory(Environment.MEDIA_SHARED).getAbsolutePath();
java.io.File folder = new java.io.File(dir + "/SomeFolderName");
if (!folder.exists()) {
try{
if(folder.mkdir()) {
Log.e("Creating Folder", "Success");
return true;
} else {
Log.e("Creating Folder", "Failed");
return false;
}
} catch(Exception e){
e.printStackTrace();
return false;
}
}else{
return true;
}
}
在有人问之前,是的,权限已被授予并且使用清单文件中存在的权限。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.package.name">
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="com.android.vending.BILLING" />
<!-- Required OpenGL ES 2.0. for Maps V2 -->
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
<application/>
测试设备是三星 S8,运行8.0.0
您没有使用有效的文件夹类型。您必须从以下选项中选择
The type of storage directory to return. Should be one of DIRECTORY_MUSIC, DIRECTORY_PODCASTS, DIRECTORY_RINGTONES, DIRECTORY_ALARMS, DIRECTORY_NOTIFICATIONS, DIRECTORY_PICTURES, DIRECTORY_MOVIES, DIRECTORY_DOWNLOADS, DIRECTORY_DCIM, or DIRECTORY_DOCUMENTS. May not be null.
你的代码应该是这样的
String dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC).getAbsolutePath();
试试这个
File fsd = Environment.getExternalStorageDirectory();
String filePath = fsd.getAbsolutePath() + "/SomeFolderName";
File dir = new File(filePath);
if(dir.isDirectory==false || !dir.exists()){
dir.mkdirs();
}
我已经通过以下方式修复了它,因为我没有其他选择,而且我已经尝试了所有建议的解决方案。也许错误是设备相关的或其他什么,但它与 API 26 无关,因为我已经将我的一个测试设备升级到 API 26 并且旧功能确实有效。
以下代码适用于所有设备。
File file = MyApplication.getInstance().getDir("BUZZ",MODE_PRIVATE);
cacheDir = new File(file.getAbsoluteFile()+File.separator+IMAGE_DIRECTORY_NAME);
快乐编码:-)
好的,所以这对我有用。
RequestPermission
方法,在请求许可时,先询问 WRITE_EXTERNAL_STORAGE
。试一试...
MainActivity.kt
// First permission to be asked
requestPermissions(arrayOf(android.Manifest.permission.WRITE_EXTERNAL_STORAGE), 1)
// Then all other permissions
这适用于所有 API 及 26 岁以上的人。 TBH,我不知道怎么做,但它工作。