Android7.0适配总结

本文总结了Android 7.0适配的三大重点:权限更改,如FileProvider的使用以避免FileUriExposedException;广播的限制及其影响;以及分屏模式的详细操作,包括生命周期、设置与拖拽支持。适配Android 7.0的开发者应关注这些变化,确保应用的正常运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、权限更改

对于面向 Android 7.0 的应用,Android 框架执行的 StrictMode API 政策禁止在您的应用外部公开 file:// URI。如果一项包含文件 URI 的 intent 离开您的应用,则应用出现故障,并出现 FileUriExposedException 异常。

要在应用间共享文件,您应发送一项 content:// URI,并授予 URI 临时访问权限。也就是说,对于应用间共享文件这块,Android N中做了强制性要求

来看一段代码

String cachePath = getApplicationContext().getExternalCacheDir().getPath();
File picFile = new File(cachePath, "test.jpg");
Uri picUri = Uri.fromFile(picFile);
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, picUri);
startActivityForResult(intent, 100);

这是常见的打开系统相机拍照的代码,拍照成功后,照片会存储在picFile文件中。

这段代码在Android 7.0之前是没有任何问题,但是如果你尝试在7.0的系统上运行,会抛出FileUriExposedException异常。

使用FileProvider

FileProvider使用大概分为以下几个步骤:

  1. manifest中申明FileProvider
  2. res/xml中定义对外暴露的文件夹路径
  3. 生成content://类型的Uri
  4. 给Uri授予临时权限
  5. 使用Intent传递Uri
1.manifest中申明FileProvider:
<manifest>
  ...
  <application>
    ...
    <provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="com.demo.fileprovider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/paths" />
    </provider>
    ...
  </application>
</manifest>

android:name:provider你可以使用v4包提供的FileProvider,或者自定义的,只需要在name申明就好了,一般使用系统的就足够了。

android:authorities:类似schema,命名空间之类,后面会用到。

android:exported:false表示我们的provider不需要对外开放。

android:grantUriPermissions:申明为true,你才能获取临时共享权限。

2. res/xml中定义对外暴露的文件夹路径:

新建paths.xml,文件名随便起,后面会引用到。

<paths xmlns:android="http://schemas.android.com/apk/res/android">
  <files-path name="my_images" path="images"/>
</paths>

name:一个引用字符串。

path:文件夹“相对路径”,完整路径取决于当前的标签类型。

path可以为空,表示指定目录下的所有文件、文件夹都可以被共享。

paths这个元素内可以包含以下一个或多个,具体如下:


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值