即使在运行时询问权限后,如何解决“访问被拒绝”错误

独特的解决方案

我是Android的新手,我试图在Android设备的内部存储中写入文本文件。但是我得到这个例外。

java.io.FileNotFoundException:/data/Afile.txt(权限被拒绝)

我尝试缩小问题范围,发现是权限问题,因此我在清单文件中使用了这些权限。

    <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

方法分开。

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

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

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

我想将其保存在更明显的文件夹中,例如“ Downloads或DCIM”,以便轻松访问它,但找不到任何方法,因此我将此文件写入“ data”文件夹中。

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系统本身拥有的私有文件夹。即使已授予存储权限,任何尝试访问它的应用程序都将被拒绝。该应用允许某些位置读取和写入。使用Environment.getExternalStoragePublicDirectory(DIRECTORY_DOWNLOADS)代替Environment.getDataDirectory()有关以下操作,请查看以下链接中的内部和外部文件存储部分:数据和文件存储概述

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何解决此问题“无法在运行时权限之前触发默认处理程序提示”

如何解决 codechef 中的 SIGEMT 运行时错误?

如何解决for循环中的Java运行时错误

如何解决 OJ 上的“运行时错误”

如何解决运行时错误:找不到graphframes

如何解决android studio运行时错误?

如何解决 Visual Studio 中的运行时错误

运行时出现错误,如何解决?

如何解决“错误70权限被拒绝”?

如何解决“ erpnext”权限拒绝错误?

如何在Android中询问Camera的运行时权限,运行时存储权限

如何获得运行时权限中的“不再询问”选项

Excel VBA运行时错误“ 70”:权限被拒绝

运行时错误70权限被拒绝Excel VBA

在运行时无需询问即可授予 Android 联系人权限

使用sudo运行时,如何克服我的权限被拒绝错误?

如何在运行“conda install nb_conda”时解决“权限被拒绝”错误?

如何申请地点权限在运行时

如何申请地点权限在运行时

如何在运行时检查授予权限?

如何在运行时删除危险权限?

如何解决运行时错误“您必须提供layout_width属性。” 在android中?

如何解决Saving Princess Peach - Kattis Problem中的运行时错误?

如何解决Excel VBA中所需的运行时错误424对象?

我如何解决运行时错误-2147219712(80040600):操作失败

如何解决R中ecdf函数中的运行时错误?

出现错误“不存在Java运行时”,我该如何解决?

如何解决此C代码中的运行时错误?

如何解决由于PyTorch中的大小不匹配而导致的运行时错误?