gpt4 book ai didi

java - 即使在运行时请求权限后如何解决 "Access Denied"错误

转载 作者:行者123 更新时间:2023-11-29 18:45:02 25 4
gpt4 key购买 nike

我是 Android 的新手,我试图在 Android 设备的内部存储中写入一个文本文件。但我遇到了这个异常(exception)。

java.io.FileNotFoundException: /data/Afile.txt (Permission denied)

我尝试缩小问题范围,发现是权限问题,所以我在 list 文件中使用了这些权限。

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

但是问题没有解决然后我发现从高于 API 级别 23 的版本我们必须在运行时请求权限所以我在运行时使用这个函数来请求在内部存储中写入文件的权限。

 private void checkDiskPermission ()
{
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this, "No Permissions" , Toast.LENGTH_LONG).show();
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, 0);
}
else
{
Toast.makeText(this, "Has Permissions" , Toast.LENGTH_LONG).show();
}
}

我在写入文件之前在按钮点击事件中调用了这个函数。并且还用在了

onCreate

分别方法。

但我仍然收到“拒绝访问”错误。

请帮助我应该怎么做以及如何解决这个问题。

这是在内部存储中写入文件的代码。

我想将它保存在任何更明显的文件夹中,例如“下载或 DCIM”以便轻松访问它,但找不到任何方法,所以我将这个文件写在“数据”文件夹中。

try {
checkDiskPermission();
File path = Environment.getDataDirectory();
if(!path.exists())
{
path.mkdirs();
}
File myfile = new File(path, "Afile.txt");

FileWriter writer = new FileWriter(myfile);

writer.append("Hello This is sample test!");
writer.flush();
writer.close();

toast = Toast.makeText(getApplicationContext(), "Successful", Toast.LENGTH_SHORT);
query.setText(path.toString());
} catch (Exception ex) {
toast = Toast.makeText(getApplicationContext(), "Failed", Toast.LENGTH_SHORT);
query.setText("Catch " + ex.toString());
}

我在按钮的 onClick 方法中使用此代码。

最佳答案

在几乎所有操作系统中,每个文件/文件夹都有所有权/权限,并且根据尝试访问它的用户,它要么完全允许或拒绝用户(显示为Permission Denied)。 /data/文件夹是Android系统自己的私有(private)文件夹。任何试图访问它的应用程序都将被拒绝,即使已授予存储权限。应用程序允许读取和写入某些位置。使用 Environment.getExternalStoragePublicDirectory(DIRECTORY_DOWNLOADS) 而不是 Environment.getDataDirectory()。检查以下链接中的内部和外部文件存储部分,了解如何操作:Data and file storage overview

关于java - 即使在运行时请求权限后如何解决 "Access Denied"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52174114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com