Android 应用程序:mkdir() 在 Google Nexus 7 上失败
Android app: mkdir() fails on Google Nexus 7
我正在尝试使用 Google Nexus 7 平板电脑上的应用程序使用 mkdir() 创建一个文件夹。之后,我将在该文件夹中保存图像。
相关代码为:
// Create the storage directory if it does not exist
if (!mediaStorageDir.exists()) {
if (!mediaStorageDir.mkdir()) {
Log.d(TAG, "Oops! Failed create "
+ Config.IMAGE_DIRECTORY_NAME + " directory");
return null;
}
}
并且日志显示:"Oops! Failed create userImages"。
到目前为止我尝试过的:
在装有 Android 4.1.2 的 Samsung Galaxy S3 mini 上测试应用程序,它运行正常。 (-> 它似乎是特定于设备的)
添加权限
< uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >
到 AndroidManifest.xml
使用 mkdirs() 而不是 mkdir()
函数
//Check SD card state
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state) || !Environment.MEDIA_MOUNTED.equals(state)) {
Log.e(TAG, "Error: external storage is read only or unavailable");
} else {
Log.d(TAG, "External storage is not read only or unavailable");
}
给出"External storage is not read only or unavailable"。
我的代码:
AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="de.hbksaar.bubbles">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
有人知道为什么我无法创建该文件夹吗?
如果 android 版本是 marshmallow 则权限检查是动态的。
请使用ContextCompat检查权限。
您使用的 Android OS 是哪个版本?如果你在 Android 6.0 上 运行,可能是因为你的应用没有 Storage 权限,请转到 Settings - > 应用 -> 你的应用 -> 权限 仔细检查你的应用有存储 权限。授予 存储 权限(如果尚未授予)。
尝试记录 mediaStorageDir 的完整路径以确保它是 SD 卡上的正确路径。
也尝试使用 mkdirs() 创建 non-exist 父目录。
我正在尝试使用 Google Nexus 7 平板电脑上的应用程序使用 mkdir() 创建一个文件夹。之后,我将在该文件夹中保存图像。
相关代码为:
// Create the storage directory if it does not exist
if (!mediaStorageDir.exists()) {
if (!mediaStorageDir.mkdir()) {
Log.d(TAG, "Oops! Failed create "
+ Config.IMAGE_DIRECTORY_NAME + " directory");
return null;
}
}
并且日志显示:"Oops! Failed create userImages"。
到目前为止我尝试过的:
在装有 Android 4.1.2 的 Samsung Galaxy S3 mini 上测试应用程序,它运行正常。 (-> 它似乎是特定于设备的)
添加权限
< uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >
到 AndroidManifest.xml使用 mkdirs() 而不是 mkdir()
函数
//Check SD card state String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state) || !Environment.MEDIA_MOUNTED.equals(state)) { Log.e(TAG, "Error: external storage is read only or unavailable"); } else { Log.d(TAG, "External storage is not read only or unavailable"); }
给出"External storage is not read only or unavailable"。
我的代码:
AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="de.hbksaar.bubbles">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
有人知道为什么我无法创建该文件夹吗?
如果 android 版本是 marshmallow 则权限检查是动态的。
请使用ContextCompat检查权限。
您使用的 Android OS 是哪个版本?如果你在 Android 6.0 上 运行,可能是因为你的应用没有 Storage 权限,请转到 Settings - > 应用 -> 你的应用 -> 权限 仔细检查你的应用有存储 权限。授予 存储 权限(如果尚未授予)。
尝试记录 mediaStorageDir 的完整路径以确保它是 SD 卡上的正确路径。
也尝试使用 mkdirs() 创建 non-exist 父目录。