我有一个应用程序说(应用程序A),其中我已通过代码在内部存储(data / data / com.example.mockapp / files)中存储了一个文本文件(testfile.txt)。
// Create a file in the Internal Storage
String content = "hello world";
String filename="testfile.txt";
File file = null;
FileOutputStream outputStream;
try {
file = new File(getFilesDir(), filename);
outputStream = new FileOutputStream(file);
outputStream.write(content.getBytes());
outputStream.close();
} catch (IOException e) {
Log.d("InternalfileException", "we are here in exception");
e.printStackTrace();
}
确认文件已成功创建且存在(我已检查过)
注意:使用文件提供程序共享文本文件。
// XML
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<files-path path="." name="mockfiles" />
</paths>
//清单
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.example.mock.fileprovider"
android:grantUriPermissions="true"
android:exported="false">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" />
</provider>
//这是主要活动的代码发送意图
Uri uri = FileProvider.getUriForFile(this, "com.example.mock.fileprovider", file);
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_STREAM, uri);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(Intent.createChooser(intent, null));
现在,当我启动应用时,会弹出带有watsapp,gmail,message等的选择器对话框,但是
当我点击它们中的任何一个时它只显示..
1)如果是watsapp - 显示txt文件,但它永远不会完成上传
2)如果是gmail - 显示txt文件永远不会作为附件附加,则会发送空邮件。
我错过了什么?
直到现在,这让我发疯了。请帮助..
答案 0 :(得分:0)
这与file permissions
有关,将其整理出来。
尝试提供适当的read
write
权限,以便实现此目的。还要确保
您正确地在manifest
中声明文件提供程序。
谢谢!
答案 1 :(得分:0)
我遇到了同样的问题,最后我在此页面找到了解决方案: https://jayrambhia.com/blog/android-fileprovider-ecosystem
这是对我有用的代码。这是在 Kotlin 中完成的,但非常相似:
//name of document
val nombre = getString(R.string.app_name).replace(" ", "_")
//saving document in internal storage
contexto!!.openFileOutput("$nombre.txt", Context.MODE_PRIVATE).use {
it.write("holita".toByteArray())
}
//Generation Uri
val path = FileProvider.getUriForFile(
contexto!!,
"${BuildConfig.APPLICATION_ID}.provider",
File(contexto!!.filesDir, "My_Password_Saver.txt")
)
//Sharing document
val shareIntent: Intent = Intent().apply {
action = Intent.ACTION_SEND
addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
putExtra(Intent.EXTRA_STREAM, path)
type = "text/plain"
}
startActivity(Intent.createChooser(shareIntent, "Enviar"))