写入文件(内部存储)并通过 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",还阅读了 ContentProvider
和 FileProvider
的文档页面,但无法使其正常工作。我也尝试了 "filepaths.xml" 方法但没有用,因此没有发布与该方法相关的代码。
如有任何帮助,我们将不胜感激。提前致谢。
getFilesDir()
提供私人内存的路径。仅适用于您的应用程序。邮件应用没有权限。
改用getExternalFilesDir()
。此外,当您使用 FileOutputStream.
写入文件时
在 Android 7.0 上,这也不起作用,您必须使用文件内容提供程序。
我今天才开始学习 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",还阅读了 ContentProvider
和 FileProvider
的文档页面,但无法使其正常工作。我也尝试了 "filepaths.xml" 方法但没有用,因此没有发布与该方法相关的代码。
如有任何帮助,我们将不胜感激。提前致谢。
getFilesDir()
提供私人内存的路径。仅适用于您的应用程序。邮件应用没有权限。
改用getExternalFilesDir()
。此外,当您使用 FileOutputStream.
在 Android 7.0 上,这也不起作用,您必须使用文件内容提供程序。