Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 即使已授予权限,也无法在外部存储中创建目录_Java_Android_Android Studio - Fatal编程技术网

Java 即使已授予权限,也无法在外部存储中创建目录

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

我在android studio中创建外部存储的新目录时遇到问题。它可能需要权限,但据我所知,一切似乎都很好

我想做的是:

  • 检查目录“/storage/emulated/0/Recordings”是否存在,如果不存在-创建目录
  • 检查文件“/storage/emulated/0/Recordings/tempFile.raw”是否存在,如果存在-将其删除
  • 使用“new FileOutputStream(filename);”在目录内创建文件
  • 代码im使用(简化):

    我得到的错误是:

    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
    }