Java 即使已授予权限,也无法在外部存储中创建目录
我在android studio中创建外部存储的新目录时遇到问题。它可能需要权限,但据我所知,一切似乎都很好 我想做的是:Java 即使已授予权限,也无法在外部存储中创建目录,java,android,android-studio,Java,Android,Android Studio,我在android studio中创建外部存储的新目录时遇到问题。它可能需要权限,但据我所知,一切似乎都很好 我想做的是: 检查目录“/storage/emulated/0/Recordings”是否存在,如果不存在-创建目录 检查文件“/storage/emulated/0/Recordings/tempFile.raw”是否存在,如果存在-将其删除 使用“new FileOutputStream(filename);”在目录内创建文件 代码im使用(简化): 我得到的错误是: java.io
java.io.FileNotFoundException:/storage/simulated/0/Recordings/tempFile.raw(没有这样的文件或目录)
注意:logcat中没有“未工作”,这意味着执行了file.mkdirs()
清单权限:
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
首先,您错过了另一个权限: 写入外部存储器 此外,你必须在活动中明确地请求许可。检查此链接:
如果您在android 10上运行应用程序,则需要将其添加到应用程序标记中的AndroidManifest.xml文件中
这是暂时的解决办法。必须使用安卓11。该死的。就这样。一定是很累了,在添加权限时,意外地删除了该权限,或者类似的内容,然后没有注意到它不存在。经验教训-仔细检查所有内容,然后再次检查。谢谢,曼特,情况并非如此,但谢谢分享。欢迎光临。如果没有此标志,您的应用程序将在使用Android 10的设备上崩溃。也请阅读此感谢,这让我发疯-能够从三星和华为的外部存储读取数据,但不能从谷歌像素(Android 10)读取数据-这解决了我的问题!
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
android {
compileSdkVersion 28
buildToolsVersion "29.0.2"
defaultConfig {
applicationId "com.example.soundrecorder"
minSdkVersion 22
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
if (ContextCompat.checkSelfPermission(thisActivity,
Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
// Permission is not granted
// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
// Show an explanation to the user *asynchronously* -- don't block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.
} else {
// No explanation needed; request the permission
ActivityCompat.requestPermissions(thisActivity,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
MY_PERMISSIONS_REQUEST_READ_CONTACTS);
// MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
// app-defined int constant. The callback method gets the
// result of the request.
}
} else {
// Permission has already been granted
}