Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.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 在存储中保存文本的权限android不工作_Java_Android_Storage_Android Permissions - Fatal编程技术网

Java 在存储中保存文本的权限android不工作

Java 在存储中保存文本的权限android不工作,java,android,storage,android-permissions,Java,Android,Storage,Android Permissions,我已经为用户构建了一个示例应用程序,用于编写一些文本并将其保存在内部存储器中 格式为TXT或pdf。我已经在android Kitkat sdk 19上试过了,它运行得很好,但当我在最新的android 9上试过时,我被拒绝了,无法将文本保存在内部存储中 编辑:我想知道是否必须手动创建我的文件文件夹 我错过了什么 AndroidManifest <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"

我已经为用户构建了一个示例应用程序,用于编写一些文本并将其保存在内部存储器中

格式为TXT或pdf。我已经在android Kitkat sdk 19上试过了,它运行得很好,但当我在最新的android 9上试过时,我被拒绝了,无法将文本保存在内部存储中

编辑:我想知道是否必须手动创建我的文件文件夹

我错过了什么

AndroidManifest

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

main活动中
您应该检查是否授予了权限,然后使用
=操作员

if(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
                        == PackageManager.PERMISSION_GRANTED) {}
这条线应该是-

if(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
                    != PackageManager.PERMISSION_GRANTED){}
正如我的建议和答案

这只是一个解决办法,但它是有效的

我补充说

android:requestLegacyExternalStorage="true"
AndroidManifest.xml
文件中的我的
元素

然后换了线

File path = Environment.getExternalStorageDirectory();


您的权限对话框是否在android 9中弹出?请检查是否有任何例外,请参阅此StackOverflow。我希望你能有所了解,斯塔克崔斯?例外?请参考此链接了解更多信息。如果这是一种很好的方法并且StackTrace没有显示任何错误,我将尝试这个答案。您可以通过在AndroidManifest.xml内部的应用程序标记上设置android:requestLegacyExternalStorage=“true”来使用旧存储。然而,你应该尽快在你的应用程序中实现作用域存储,因为在Android 11上,谷歌表示无论targetSdkVersion如何,所有应用程序都需要它
android:requestLegacyExternalStorage=“true”
这只对android 10有意义。并且仅当您希望继续使用getExternalStorageDirectory()时。不要同时改变两件事,因为你不知道是哪一件做的。你链接到的答案是针对Android 10的。
File path = Environment.getExternalStorageDirectory();
File path = new File(getExternalFilesDir(null).getAbsolutePath());