本文主要收纳Android 10相关适配知识点
targetSdkVersion = 29
Android 10相关适配异常归纳
.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); 引起的异常
原因是当目标版本从Android P开始,Canvas.clipPath(@NonNull Path path, @NonNull Region.Op op) ; 已经被废弃,而且是包含异常风险的废弃API,只有 Region.Op.INTERSECT 和 Region.Op.DIFFERENCE 得到兼容
解决方案:
1 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { |
明文HTTP限制
当 targetSdkVersion >= Build.VERSION_CODES.P 时,默认限制了HTTP请求,并出现相关日志:
java.net.UnknownServiceException: CLEARTEXT communication to xxx not permitted by network security policy
解决方案1:在AndroidManifest.xml中Application添加如下节点代码
1 | <application android:usesCleartextTraffic="true"> |
解决方案2:在res目录新建xml目录,已建的跳过 在xml目录新建一个xml文件network_security_config.xml,然后在AndroidManifest.xml中Application添加如下节点代码
android:networkSecurityConfig=”@xml/network_config”
名字随机,内容如下:
1 |
|
Android Q(10)中的媒体资源读写
相关的Android Q 行为变遇到的问题
扫描系统相册、视频等,图片、视频选择器都是通过ContentResolver来提供,主要代码如下:
1 | private static final String[] IMAGE_PROJECTION = { |
判断公有目录文件是否存在,自Android Q开始,公有目录File API都失效,不能直接通过new File(path).exists();判断公有目录文件是否存在,正确方式如下:
1 | public static boolean isAndroidQFileExists(Context context, String path){ |
保存或者下载文件到公有目录,保存Bitmap同理,如Download,MIME_TYPE类型可以自行参考对应的文件类型,这里只对APK作出说明
1 | public static void copyToDownloadAndroidQ(Context context, String sourcePath, String fileName, String saveDirName){ |
保存图片相关
1 | /** |
EditText默认不获取焦点,不自动弹出键盘
该问题出现在 targetSdkVersion >= Build.VERSION_CODES.P 情况下,解决方案如下:
1 | mEditText.post(() -> { |
Only fullscreen activities can request orientation 异常
该问题出现在 targetSdkVersion >= Build.VERSION_CODES.O_MR1 ,也就是 API 27,当设备为Android 26时(27以上已经修复,也许google觉得不妥当,又改回来了),如果非全面屏透明activity固定了方向,则出现该异常,但是当我们在小米、魅族等Android 26机型测试的时候,并没有该异常,华为机型则报该异常,这是何等的卧槽。。。没办法,去掉透明style或者去掉固定方向代码即可,其它无解
安装APK Intent及其它文件相关Intent
1 | /* |