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

pdkcd3nj  于 2021-06-26  发布在  Java
关注(0)|答案(0)|浏览(290)

我最近创建了一个应用程序,其中我通过一个意图过滤器共享文件,这样用户就可以将共享文件保存在系统上的任何文件夹中。
此应用程序的目的是共享whatsapp(或任何其他应用程序)中的文件,并通过文件资源管理器选择保存该文件的位置。

对于内部存储,它工作正常。可以将文件保存在该位置内的任何文件夹中。但是,当选择外部存储文件夹(外部“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();
        }
    }

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题