欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

解析 Android R(11) getContentResolver 获取多媒体图片

程序员文章站 2022-07-08 17:18:07
10月1 假期归来,回顾线上app 功能及bug 回馈检查时,发现 Android 11 系统 app 出现的一系列问题1、首先是原有使用反射获取的 Toast view 出现空, 通过反射获取 状态栏的view 出现空异常2、使用第三方的PictureSelector 图片选择器 出现异常,不能正常加载相册图片针对以上两个问题展开排查1、具体问题应该是反射路径或地址修正了,可使用以下方法 public static int getStatusBarHeight(Cont......

10月1 假期归来,回顾线上app 功能及bug 回馈检查时,发现 Android 11 系统 app 出现的一系列问题

1、首先是原有使用反射获取的 Toast view  出现空, 通过反射获取 状态栏的view 出现空异常 

2、使用第三方的PictureSelector 图片选择器 出现异常,不能正常加载相册图片

 

针对以上两个问题展开排查

1、具体问题应该是反射路径或地址修正了,可使用以下方法

   public static int getStatusBarHeight(Context context) {
//        int statusBarHeight = 0;
//        try {
//
//            @SuppressLint("PrivateApi") Class<?> c = Class.forName("com.android.internal.R$dimen");
//            Object o = c.newInstance();
//            Field field = c.getField("status_bar_height");
//            int x = (Integer) field.get(o);
//            statusBarHeight = context.getApplicationContext().getResources().getDimensionPixelSize(x);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return statusBarHeight == 0 ? dip2px(context, 25) : statusBarHeight;
        int result = 0;
        int resourceId = Resources.getSystem().getIdentifier("status_bar_height", "dimen", "android");
        if (resourceId > 0) {
            result = Resources.getSystem().getDimensionPixelSize(resourceId);
        }
        return result;
    }

 

2、具体问题是,getContentResolver().query 的 sortOrder 参数 只支持 排序,不再支持 order by ,group by 等语句,

查看源码可知

解析 Android R(11)  getContentResolver  获取多媒体图片

解析 Android R(11)  getContentResolver  获取多媒体图片

最终把所有方法参数 转换伟bundle  传给 query 进行查询

解析 Android R(11)  getContentResolver  获取多媒体图片

跟踪代码后 Android R  新增了  ContentResolver#QUERY_ARG_SQL_LIMIT  条件,那么是不是咱们就可以把 

limit 语句放到 budle 呢?

具体修改方案如下:

解析 Android R(11)  getContentResolver  获取多媒体图片

解析 Android R(11)  getContentResolver  获取多媒体图片

 

 
 

本文地址:https://blog.csdn.net/wmyasw/article/details/108993757