Android 无法创建文件夹(目录) 11、如何创建?
Unable to create a folder(directory) in Android 11, how to create it?
我无法使用 java 在我的 Android 11 设备中创建文件夹。我用了这段代码
File file = new File(Environment.getExternalStorageDirectory() + "/folderName/folderName1");
if (!file.mkdirs()) {
file.mkdirs();
}
String filePath = file.getAbsolutePath() + File.separator + "demoName";
Log.i("filePath",filePath.toString());
以上日志语句的输出是 /storage/emulated/0/folderName/folderName1/demoName
但是当我检查我的 phone 时没有创建这样的文件夹。
只是为了确认我已经研究并确实包含了我需要包含在清单文件中的所有内容。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
我也放了
android:requestLegacyExternalStorage="true"
在应用程序标签内的正确位置。
这就是我从 link 下载 PDF 的方法。
File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS) + "/Aide Memoire");
public void DownloadBooks(String url,String title){
DownloadManager.Request request=new DownloadManager.Request(Uri.parse(url));
String tempTitle=title.trim();
request.setTitle(tempTitle);
if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.HONEYCOMB){
request.allowScanningByMediaScanner();
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
}
String filePath = file.getAbsolutePath();
Log.i("filePath",filePath.toString());
request.setDestinationInExternalPublicDir(filePath,tempTitle+".pdf");
Toast.makeText(this, "Saved to " + filePath , Toast.LENGTH_SHORT).show();
DownloadManager downloadManager=(DownloadManager)getSystemService(Context.DOWNLOAD_SERVICE);
request.setMimeType("application/pdf");
request.allowScanningByMediaScanner();
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE | DownloadManager.Request.NETWORK_WIFI);
downloadManager.enqueue(request);
}
DownloadBooks("a link"," a name for the file");
在 运行 上面我得到一个错误并且 logcat 说
java.lang.IllegalStateException: Not one of standard directories:
现在,如何在 Android 11 中的 内部存储 中创建自定义文件夹而不出错?
您是否在运行时检查存储权限?
这是 google 在 android 11 中更改的 api 30 存储访问:
正如您在该函数名称上看到的那样,这就是所谓的外部存储。
但是在 Android 11 设备上,您无法在外部存储的根目录上创建自己的子目录。
而是在已经存在的 public 目录之一上执行此操作,例如文档、DCIM、图片等等
我无法使用 java 在我的 Android 11 设备中创建文件夹。我用了这段代码
File file = new File(Environment.getExternalStorageDirectory() + "/folderName/folderName1");
if (!file.mkdirs()) {
file.mkdirs();
}
String filePath = file.getAbsolutePath() + File.separator + "demoName";
Log.i("filePath",filePath.toString());
以上日志语句的输出是 /storage/emulated/0/folderName/folderName1/demoName
但是当我检查我的 phone 时没有创建这样的文件夹。
只是为了确认我已经研究并确实包含了我需要包含在清单文件中的所有内容。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
我也放了
android:requestLegacyExternalStorage="true"
在应用程序标签内的正确位置。
这就是我从 link 下载 PDF 的方法。
File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS) + "/Aide Memoire");
public void DownloadBooks(String url,String title){
DownloadManager.Request request=new DownloadManager.Request(Uri.parse(url));
String tempTitle=title.trim();
request.setTitle(tempTitle);
if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.HONEYCOMB){
request.allowScanningByMediaScanner();
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
}
String filePath = file.getAbsolutePath();
Log.i("filePath",filePath.toString());
request.setDestinationInExternalPublicDir(filePath,tempTitle+".pdf");
Toast.makeText(this, "Saved to " + filePath , Toast.LENGTH_SHORT).show();
DownloadManager downloadManager=(DownloadManager)getSystemService(Context.DOWNLOAD_SERVICE);
request.setMimeType("application/pdf");
request.allowScanningByMediaScanner();
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE | DownloadManager.Request.NETWORK_WIFI);
downloadManager.enqueue(request);
}
DownloadBooks("a link"," a name for the file");
在 运行 上面我得到一个错误并且 logcat 说
java.lang.IllegalStateException: Not one of standard directories:
现在,如何在 Android 11 中的 内部存储 中创建自定义文件夹而不出错?
您是否在运行时检查存储权限? 这是 google 在 android 11 中更改的 api 30 存储访问:
正如您在该函数名称上看到的那样,这就是所谓的外部存储。
但是在 Android 11 设备上,您无法在外部存储的根目录上创建自己的子目录。
而是在已经存在的 public 目录之一上执行此操作,例如文档、DCIM、图片等等