写入文件(内部存储)并通过 mail/bluetooth. 作为 .txt 文件共享

Writing to a file (internal storage) and sharing it via mail/bluetooth.as a .txt file

我今天才开始学习 Android(所以我对此还是个新手),我正在努力实现这一点:

让用户输入一些数据。将此数据保存为 .txt 文件。 (在 Internal Storage 中,因为我的目标 phone 没有 SD 卡)。阅读此 .txt 文件并通过邮件将其作为附件共享或通过任何其他方式共享。 (Bluetooth/Whatsapp/Facebook/Drive) 等等

这是问题所在:

我可以让用户保存数据。我也能读回来。但是,当我尝试共享它时,它以纯文本形式显示。即,如果我通过 GMail 共享它,它不会作为文本文件附件,而是文本本身作为邮件正文。通过 bluetooth 共享它使其成为一个 .html 文件,如果它可以通过邮件发送,它仍然可以解决我的目的。

我的代码:

将数据(以字节流形式出现)保存到文件:

@Override
public void onReceivedData(byte[] arg0) {
    data = new String(arg0, "UTF-8");
    String filename = "testFile.txt";
    FileOutputStream outputStream;
    try {
        outputStream = openFileOutput(filename, Context.MODE_APPEND);
        outputStream.write(data.getBytes());
        //The following 2 lines just for feedback
        data = data.concat(" Wrote to file");
        tvAppend(textView, data);
        outputStream.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

正在读取文件并作为附件发送:

方法 1(产生明文):

    char c;
    int i;
    String dataToSend = "";
    String filename = "testFile.txt";
    FileInputStream inputStream;
    try {
        inputStream = openFileInput(filename);
        while((i=inputStream.read())!=-1)
        {
            c=(char)i;
            dataToSend += c;
        }
        inputStream.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
    sendIntent.putExtra(Intent.EXTRA_TEXT, dataToSend);
    sendIntent.setType("text/plain");
    startActivity(sendIntent);

方法 2(无效):

Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
try{
    String filePath = getFilesDir().getAbsolutePath();
    File file = new File(filePath, "testFile.txt");
    sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
}
catch (Exception e)
    e.printStackTrace();
}
sendIntent.setType("*/*");
startActivity(sendIntent);

在这种方法中,我得到了共享 dialog 框,但是所有附件/bluetooth 传输都失败了。

错误信息:

Bluetooth: Unknown File; Request can't be handled correctly

Gmail 附件:

Permission denied for the attachment

有人可以指导我吗?我确实浏览了 following 的 "Note",还阅读了 ContentProviderFileProvider 的文档页面,但无法使其正常工作。我也尝试了 "filepaths.xml" 方法但没有用,因此没有发布与该方法相关的代码。

如有任何帮助,我们将不胜感激。提前致谢。

 getFilesDir() 

提供私人内存的路径。仅适用于您的应用程序。邮件应用没有权限。

改用getExternalFilesDir()。此外,当您使用 FileOutputStream.

写入文件时

在 Android 7.0 上,这也不起作用,您必须使用文件内容提供程序。