📅  最后修改于: 2023-12-03 15:36:42.773000             🧑  作者: Mango
在 Android 10 中,对文件系统的更改可能会导致您的应用程序无法访问某些文件或目录。因此,在将文件保存到设备上以与其他应用程序共享时,必须遵循安卓 10 的新规则。在这篇文章中,我将介绍如何在 Android 10 上保存位图文件以进行共享。
首先需要添加文件共享需要的权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
共享文件需要保存在新的目录中,而不是以前使用的默认目录。在 Android 10 中,应用程序只能在以下目录中创建公共目录:
Environment.DIRECTORY_DOWNLOADS
Environment.DIRECTORY_PICTURES
Environment.DIRECTORY_DCIM
Environment.DIRECTORY_DOCUMENTS
您可以使用以下代码段创建自定义目录:
File sharedFolder = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "SharedFolder");
if (!sharedFolder.exists()) {
sharedFolder.mkdir();
}
接下来,您将需要保存位图文件。使用以下代码段从位图创建文件:
File file = new File(sharedFolder, "example.jpg");
try {
FileOutputStream fos = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
fos.close();
Toast.makeText(this, "File saved to " + file.getAbsolutePath(), Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
}
在这里,我们使用 FileOutputStream 来保存文件,注意一定要关闭输出流。
在 Android 10 中,您必须明确授予其他应用程序访问您的应用程序创建的文件的权限。为此,请使用以下代码段:
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("image/*");
Uri uri = FileProvider.getUriForFile(this, getApplicationContext().getPackageName() + ".provider", file);
shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(Intent.createChooser(shareIntent, "Share file via..."));
请注意,我们在此处使用 FileProvider.getUriForFile() 方法获取引用和存储文件的存储位置。此时的权限就已经正确地被信任方授予了。
最后,您需要在 AndroidManifest.xml 文件中添加以下内容:
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
接下来,在 res/xml 下创建一个名称为 file_paths.xml 的新文件并添加以下内容:
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="shared_files" path="."/>
</paths>
使用以上代码,您就可以在 Android 10 上保存位图文件并与其他应用程序共享。不要忘记当你不再需要共享文件时删除文件。