Android 7.0适配

调用系统相机报错问题

由于Android7.0执行了“StrictMode API 政策禁”的原因,调用系统相机报android.os.FileUriExposedException问题
解决办法:使用FileProvider
解决步骤
第一步: 在AndroidManifest.xml中注册provider

<provider
      android:name="android.support.v4.content.FileProvider"
      android:authorities="${applicationId}.provider"
      android:exported="false"
      android:grantUriPermissions="true">
      <meta-data
          android:name="android.support.FILE_PROVIDER_PATHS"
          android:resource="@xml/provider_paths"/>
</provider>

!!!注意:exported:要求必须为false,为true则会报安全异常。grantUriPermissions:true,表示授予 URI 临时访问权限。

第二步:指定共享的目录,在res目录下创建xml目录,在xml目录下创建provider_paths.xml(名字可以随便起,只要和在manifest注册的provider所引用的resource保持一致即可)资源文件,内容如下:

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

!!!注意:上述代码中path=”.”,是有特殊意义的,它代码根目录,也就是说你可以向其它的应用共享根目录及其子目录下任何一个文件了,如果你将path设为path=”pictures”, 那么它代表着根目录下的pictures目录(eg:/storage/emulated/0/pictures),如果你向其它应用分享pictures目录范围之外的文件是不行的。
第三步:使用FileProvider,代码如下:

Uri uri;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N)
{
    uri = Uri.fromFile(file);
}
else
{
    uri = FileProvider.getUriForFile(mContext, mContext.getApplicationContext().getPackageName() + ".provider", file);
}
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.putExtra("output", uri);
mContext.startActivityForResult(intent, requestCode);

因为在使用FileProvider时sdk<24版本手机运行时报
java.lang.SecurityException: Permission Denial: opening provider android.support.v4.content.FileProvider is not exported。问题未找到解决办法,所以在sdk<24 手机上仍按之前方式处理。
注意:需要在项目中所有使用Uri.fromFile(file)的地方都改为FileProvider.getUriForFile(…)。

页面无法点击和滑动问题

在Android7.0手机上出现了部分页面无法滑动的现象,把可能原因一一排除后,发现是Dialog造成的,具体原因尚未查清,在简书上看到文章将Dialog的hide方法改成dismiss方法后解决了这个问题,如果有人知道原因的话,欢迎一起交流。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值