随着Android系统的不断升级,开发者们需要不断适应新的行为变更和API更新。Android 7.0引入了一些重大的变更,其中之一是关于文件共享的变更。在本文中,我们将重点讨论通过FileProvider在应用间共享文件的变更,特别关注在使用ACTION_IMAGE_CAPTURE
进行拍照操作时所涉及的一些变化。
1. 什么是FileProvider?
FileProvider是Android提供的一个特殊的ContentProvider,用于共享应用的私有文件。使用FileProvider,可以在没有文件读写权限的情况下,通过URI访问应用的文件。一般来说,当我们需要向其他应用共享应用内的文件时,可以使用FileProvider来实现。
2. FileProvider的使用步骤
下面是使用FileProvider进行文件共享的简要步骤:
步骤1:在AndroidManifest.xml中声明FileProvider
在application
标签下添加如下内容,指定FileProvider的名称和授权的文件路径:
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.your.package.name.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
步骤2:创建file_paths.xml文件
在res/xml
目录下创建file_paths.xml
文件,并添加所需的路径配置。以下是一个示例:
<paths>
<files-path name="my_images" path="images/"/>
<external-path name="my_files" path="."/>
</paths>
步骤3:生成共享的URI
在代码中使用FileProvider生成共享的URI,例如:
File imagePath = new File(getFilesDir(), "images");
File newFile = new File(imagePath, "example.jpg");
Uri contentUri = FileProvider.getUriForFile(context, "com.your.package.name.fileprovider", newFile);
3. Android 7.0的变更
在Android 7.0之前,我们可以直接将URI传递给ACTION_IMAGE_CAPTURE
来保存拍摄的照片。然而,在Android 7.0及以后的版本中,安全性的考虑使得我们需要采取一些额外的步骤。
步骤4:授予临时权限
在调用ACTION_IMAGE_CAPTURE
之前,我们需要为生成的URI授予临时的读写权限。在部分设备上,不授予权限可能导致Permission Denial
异常。
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.putExtra(MediaStore.EXTRA_OUTPUT, contentUri);
步骤5:处理返回结果
在接收ACTION_IMAGE_CAPTURE
的返回结果时,我们可能需要通过FileProvider并使用提供的URI来访问图片。
Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), contentUri);
4. 总结
通过FileProvider在Android 7.0及以上版本中实现文件共享可能需要我们额外的注意和操作,特别是在使用ACTION_IMAGE_CAPTURE
进行拍照操作时。我们需要在AndroidManifest.xml中声明FileProvider,并授予临时的读写权限,以及在处理返回结果时使用提供的URI来访问图片。理解和适应这些行为变更,将有助于我们在应用开发中更好地与其他应用进行文件共享。
(完)
本文来自极简博客,作者:魔法少女酱,转载请注明原文链接:Android 7.0 行为变更:通过FileProvider在应用间共享文件(ACTION_IMAGE_CAPTURE)