Android10填坑适配指南(实际经历代码)

发布时间:2019-12-02 15:59 来源:互联网 以后栏目:网站办事器

明天看到一篇好的文章,分享给大年夜家,跪拜大年夜佬。

Android10填坑适配指南,包含实际经历代码,绝不照搬翻译文档

1.Region.Op相干异常:java.lang.IllegalArgumentException: Invalid Region.Op - only INTERSECT and DIFFERENCE are allowed

当 targetSdkVersion >= Build.VERSION_CODES.P 时调用 canvas.clipPath(path, Region.Op.XXX); 惹起的异常,参考源码以下:

@Deprecated
public boolean clipPath(@NonNull Path path, @NonNull Region.Op op) {
  checkValidClipOp(op);
  return nClipPath(mNativeCanvasWrapper, path.readOnlyNI(), op.nativeInt);
}

private static void checkValidClipOp(@NonNull Region.Op op) {
  if (sCompatiblityVersion >= Build.VERSION_CODES.P
   && op != Region.Op.INTERSECT && op != Region.Op.DIFFERENCE) {
   throw new IllegalArgumentException(
     "Invalid Region.Op - only INTERSECT and DIFFERENCE are allowed");
  }
}

我们可以看到当目标版本从Android P开端,Canvas.clipPath(@NonNull Path path, @NonNull Region.Op op) ; 曾经被放弃,并且是包含异常风险的放弃API,只要 Region.Op.INTERSECT 和 Region.Op.DIFFERENCE 取得兼容,简直一切的博客处理筹划都是以下简单粗暴:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
 canvas.clipPath(path);
} else {
 canvas.clipPath(path, Region.Op.XOR);// REPLACE、UNION 等
}

但我们必定须要一些高等逻辑运算后果怎样办?如小说的仿真翻页浏览后果,处理筹划以下,用Path.op代替,先运算Path,再

给canvas.clipPath:
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.P){
 Path mPathXOR = new Path();
 mPathXOR.moveTo(0,0);
 mPathXOR.lineTo(getWidth(),0);
 mPathXOR.lineTo(getWidth(),getHeight());
 mPathXOR.lineTo(0,getHeight());
 mPathXOR.close();
 //以上根据实际的Canvas或View的大年夜小,画出雷同大年夜小的Path便可
 mPathXOR.op(mPath0, Path.Op.XOR);
 canvas.clipPath(mPathXOR);
}else {
 canvas.clipPath(mPath0, Region.Op.XOR);
}

2.明文HTTP限制

当 targetSdkVersion >= Build.VERSION_CODES.P 时,默许限制了HTTP请求,并出现相干日记:

java.net.UnknownServiceException: CLEARTEXT communication to xxx not permitted by network security policy

第一种处理筹划:在AndroidManifest.xml中Application添加以下节点代码

<application android:usesCleartextTraffic="true">

第二种处理筹划:在res目次新建xml目次,已建的跳过 在xml目次新建一个xml文件network_security_config.xml,然后在AndroidManifest.xml中Application添加以下节点代码

android:networkSecurityConfig="@xml/network_config"

名字随机,内容以下:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
 <base-config cleartextTrafficPermitted="true" />
</network-security-config>

3.Android Q中的媒体资本读写

1、扫描体系相册、视频等,图片、视频选择器都是经过过程ContentResolver来供给,重要代码以下:

  • 1、
  • 2、
  • 3、
  • 4、
  • 5、
  • 6、
  • 7、
  • 8、
  • 9、
  • 10、
  • 11、
  • 12、
  • 13、
  • 14、
  • 15、
  • 16、
  • 17、
  • 18、
  • 19、
  • 20、
  • 21、
  • 22、
  • 23、
  • 24、
  • 25、
  • 1、
  • 2、
  • 3、
  • 4、
  • 5、
  • 6、
  • 7、
  • 8、
  • 9、
  • 10、
  • 11、
  • 12、
  • 13、
  • 14、
  • 15、
  • 16、
  • 17、
  • 18、
  • 19、
  • 20、
  • 21、
  • 22、
  • 23、
  • 24、
  • 25、