Android 7.0适配 afinal报错

最近项目碰到7.0版本运行直接闪退

错误日志如下

com.android.internal.policy.DecorContext cast to activity
通过打印日志和查看源码得知

net.tsz.afinal.AFinalUIHelper.initView(View view){
...
Activity activity =(Activity) view.getContext();//23...
}

分析日志

// 7.0版本 view.getContext().getClass()=com.android.internal.policy.DecorContext
        // 5.0版本 view.getContext().getClass()=com.android.internal.policy.impl.PhoneWindow$DecorView

修改代码

通过错误日志分析DecorContext不能转换成activity
需要通过反射DecorContext的mPhoneWindow然后再反射里面context得到
在7.0之前直接取就行了 activity = (Activity) view.getContext();

if(view.getContext().getClass().getName().contains("com.android.internal.policy.DecorContext")){
    try{
        Field field=view.getContext().getClass().getDeclaredField("mPhoneWindow");  
        field.setAccessible(true);  
        Object  obj=field.get(view.getContext());
        java.lang.reflect.Method m1 = obj.getClass().getMethod("getContext");
        activity=(Activity) (m1.invoke(obj));
//              Log.d("DebugTools", m1.invoke(obj).getClass().getName());
        fields = activity.getClass().getDeclaredFields();
//              for(Field dd:fields){
//                  Log.d("DebugTools","-"+ dd.getName());
//              }
    }catch(Exception ee){
        Log.e("DebugTools", "",ee);
    }
}else{
    activity = (Activity) view.getContext();
}

附上源码DecorContext源码查看

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值