如何在 Android 上拥有将文件保存到 SD 卡的权限

问题描述

我最近创建了一个应用程序,我通过一个意图过滤器在其中共享文件,以便用户可以将共享文件保存在系统上的任何文件夹中。

此应用的目的是共享来自 WhatsApp(或任何其他应用)的文件,并通过文件资源管理器选择保存位置。

SaveFile app print screen

它在内部存储中正常工作。可以将文件保存在该位置的任何文件夹中。但是,在选择外部存储文件夹(外部“SD卡”时,它不允许保存,并显示指示权限错误的消息,抛出以下异常:

java.io.IOException: open Failed: EACCES (Permission denied)
  at java.io.File.createNewFile(File.java:939)
  at br.com.luansilveira.savefile.MainActivity.btSalvarClick(MainActivity.java:370)

在应用程序清单中,已请求存储权限:

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

并且在启动应用程序时,会为用户请求它们。

下面是写入文件代码

public void btSalvarClick(View view) {
        String filename = diretorioAtual.getAbsolutePath() + "/" + ednomeArquivo.getText().toString();
        try {
            File novoArquivo = new File(diretorioAtual,ednomeArquivo.getText().toString());
            if (!novoArquivo.createNewFile()) {
                Toast.makeText(this,"O arquivo já existe!",Toast.LENGTH_LONG).show();
                return;
            }

            FileOutputStream outputStream = new FileOutputStream(novoArquivo);
            outputStream.write(getBytes(uri));
            outputStream.close();

            finish();
            Toast.makeText(this,"Arquivo salvo",Toast.LENGTH_LONG).show();
        } catch (FileNotFoundException e) {
            e.printstacktrace();
            Toast.makeText(this,"Sem permissão para salvar neste local",Toast.LENGTH_LONG).show();
        } catch (IOException e) {
            e.printstacktrace();
            Toast.makeText(this,"Erro ao salvar: \n" + e.getMessage(),Toast.LENGTH_LONG).show();
        }
    }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...