Java 我无法通过操作发送txt文件。\u发送意图
这是我遇到麻烦的代码。出于某种原因,每当我单击按钮运行此功能块并选择要在其上使用它的应用程序时,它都表示不支持该文件类型。我有外部文件访问权限,并且我已经测试了文件在我写之后是否存在,那个里并没有任何问题 我在活动的onCreate函数上也有此块:Java 我无法通过操作发送txt文件。\u发送意图,java,android,android-studio,Java,Android,Android Studio,这是我遇到麻烦的代码。出于某种原因,每当我单击按钮运行此功能块并选择要在其上使用它的应用程序时,它都表示不支持该文件类型。我有外部文件访问权限,并且我已经测试了文件在我写之后是否存在,那个里并没有任何问题 我在活动的onCreate函数上也有此块: @Override public void onClick(View v) { File dir = new File(Environment.getExternalStorageDirectory().getPath(), "D
@Override
public void onClick(View v) {
File dir = new File(Environment.getExternalStorageDirectory().getPath(), "Documents");
if(!dir.exists()){
dir.mkdir();
}
File file = new File(dir, "file.txt");
try {
FileWriter writer = new FileWriter(file);
writer.append("Test");
writer.flush();
writer.close();
} catch (Exception e){
e.printStackTrace();
}
Intent intent = new Intent(Intent.ACTION_SEND);
Uri uri = Uri.fromFile(file);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_EMAIL, "emailaddress@hotmail.com");
intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
intent.putExtra(Intent.EXTRA_TEXT, "Body of the mail");
intent.putExtra(Intent.EXTRA_STREAM, uri);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivityForResult(Intent.createChooser(intent, "Send email..."),12);
}
如果没有这个块,每当我试图发送附件时,程序就会崩溃,我想知道原因是什么
我使用的是API 22
编辑
已实现FileProvider,但仍无法将文件发送到其他应用程序。
我是这样发送的:
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
这是AndroidManifest提供程序
Intent intent = new Intent(Intent.ACTION_SEND);
Uri uri = FileProvider.getUriForFile(getApplicationContext(), "com.company.documentproject_1.fileprovider", file);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_EMAIL, "emailaddress@hotmail.com");
intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
intent.putExtra(Intent.EXTRA_TEXT, "Body of the mail");
intent.putExtra(Intent.EXTRA_STREAM, uri);
intent.addFlags(
Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
startActivityForResult(Intent.createChooser(intent, "Send email..."),12);
Uri=Uri.fromFile(文件)
将生成FileUriExposedException
那是行不通的
您必须使用文件提供程序并通过以下方式获取uri:
E/ActivityThread: Failed to find provider info for cn.teddymobile.free.anteater.den.provider
发布崩溃将有助于了解发生的情况。
如果(!dir.mkdir()){Toast(…抱歉无法创建dir..);return;}
捕获(异常e){e.printStackTrace();}
如果您有此捕获,您仍然可以启动该意图。相反,您应该显示一个祝酒词来通知用户并返回/停止。删除严格模式的内容。很遗憾。您没有展示如何实例化所使用的文件
变量。还是还是老样子?如果您试图获取uri,则会出现异常。请执行并告诉file.getAbsolutePath()
的值。你发布了新代码,我应该看看。但是为什么呢?有什么问题吗?那个提供者的错误和代码有什么关系?你好,我对原来的帖子做了一些修改,你能帮我吗?
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path
name="external_files"
path="." />
</paths>
E/ActivityThread: Failed to find provider info for cn.teddymobile.free.anteater.den.provider
Uri uri = FileProvider.getUriForFile(......, file);