尝试发送csv文件但权限失败

时间:2016-11-02 17:46:23

标签: java android sendfile

我尝试发送文件(Intent.ACTION_SEND),但是当我使用gmail时,权限失败,gmail通知我附件的权限不允许发送。 这是我的代码:

private void LoadSendFile() {

    String temp = new String();
    File tempFile = new File(Environment.getExternalStorageDirectory() + File.separator + "Datos" + ext);

    try {
        FileOutputStream fos = new FileOutputStream(tempFile);

        for (ActivityMat data : matriculas) {
            if (!data.getViajesConductor().isEmpty()) {
                for (String date : data.getViajesConductor()) {
                    temp += data.getName() + ": " + date + "\n";
                    fos.write(temp.getBytes());
                    Log.e("Write File: ", temp);
                }
            }
        }

        fos.close();

    } catch (FileNotFoundException e){
        Log.e("Creando fichero: ", e.getMessage(), e);
        Toast toast = Toast.makeText(MainActivity.this, "File not found ...", Toast.LENGTH_SHORT);
        toast.show();
        return;

    } catch (IOException e) {
        Log.e("Escribiendo fichero: ", e.getMessage(), e);
        Toast toast = Toast.makeText(MainActivity.this, "Can not build the file ...", Toast.LENGTH_SHORT);
        toast.show();
        return;
    }

    Intent sendIntent = new Intent(Intent.ACTION_SEND);
    sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(tempFile));
    sendIntent.setType("application/csv");
    startActivity(sendIntent);
}

提前致谢!!!

(对不起我的语言,我不是英语)

更新: 代码已更新。现在我有权限,但是gmail通知我它不能发送一个空文件,但我知道(因为我在写入文件时写了一条日志消息(Datos.csv))我写在文件中。任何的想法?? 这是日志(我看到是一个许可问题):

E/Creando fichero:: /storage/emulated/0/Datos.csv: open failed: EACCES (Permission denied)
                java.io.FileNotFoundException: /storage/emulated/0/Datos.csv: open failed: EACCES (Permission denied)
 ....  //here the "at" statement

Caused by: android.system.ErrnoException: open failed: EACCES (Permission denied)

1 个答案:

答案 0 :(得分:1)

getFilesDir()是您应用的私密内存。电子邮件应用无法访问它。

尝试其他位置,例如getExternalStorageDirectory()getExternalFilesDir()

此外,您需要在清单文件中请求WRITE_EXTERNAL_STORAGE权限。

如果在运行时为用户编译Android 6及更高版本的请求,那么。