gpt4 book ai didi

来自内部存储的 Android Intent.ACTION_SEND 和 Content Provider

转载 作者:行者123 更新时间:2023-11-29 15:03:46 25 4
gpt4 key购买 nike

我正在将文件保存在内部存储器中。它只是一个包含有关对象的一些信息的 .txt 文件:

    FileOutputStream outputStream;
String filename = "file.txt";

File cacheDir = context.getCacheDir();
File outFile = new File(cacheDir, filename);
outputStream = new FileOutputStream(outFile.getAbsolutePath());
outputStream.write(myString.getBytes());
outputStream.flush();
outputStream.close();

然后我正在创建一个“shareIntent”来共享这个文件:

    Uri notificationUri = Uri.parse("content://com.package.example/file.txt");
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM, notificationUri);
shareIntent.setType("text/plain");
context.startActivity(Intent.createChooser(shareIntent, context.getResources().getText(R.string.chooser)));

所选应用现在需要访问私有(private)文件,因此我创建了一个内容提供程序。我刚刚更改了 openFile 方法:

@Override
public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {
File privateFile = new File(getContext().getCacheDir(), uri.getPath());
return ParcelFileDescriptor.open(privateFile, ParcelFileDescriptor.MODE_READ_ONLY);
}

list :

<provider
android:name=".ShareContentProvider"
android:authorities="com.package.example"
android:grantUriPermissions="true"
android:exported="true">
</provider>

当打开邮件应用程序共享文件时,它说无法附加文件,因为它只有 0 字节。通过蓝牙共享它也失败了。但是我可以读出Content Provider中的privateFile,所以它存在并且有内容。有什么问题?

最佳答案

感谢 pskink。 FileProvider 完美运行:

Gradle 依赖:

编译 'com.android.support:support-v4:25.0.0'

list :

<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.package.example"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>

XML 文件夹中的 file_paths.xml:

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<cache-path name="cache" path="/" />
</paths>

共享 Intent :

    File file = new File(context.getCacheDir(), filename);

Uri contentUri = FileProvider.getUriForFile(context, "com.package.example", file);

Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM, contentUri);
shareIntent.setType("text/plain");
context.startActivity(Intent.createChooser(shareIntent, context.getResources().getText(R.string.chooser)));

关于来自内部存储的 Android Intent.ACTION_SEND 和 Content Provider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40703407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com