您的位置:首页 > 移动开发 > Android开发

解决Android7.0 com.Android.internal.policy.DecorContext cast to activity(by 星空武哥)

2016-11-21 22:29 1211 查看
转载请标注原文地址:http://blog.csdn.net/lsyz0021/article/details/53266021

        最近我们的项目在Android7.0出现了的bug,由于Android7.0系统刚发布没多久,使用Android7.0的手机目前也就是华为的mate9,我们的问题也就是反应在mate9上面。我们项目中用到了view.getContext()方法获取context或者activity,在之前的系统上都是没有问题的,而在Android7.0系统就报错,后来才知道应该是7.0的系统对其进行了限制。那么我们怎么才能解决呢?

异常信息提示:

com.Android.internal.policy.DecorContext cast to activity……


也就是不能利用view获取activity,那么我们可以使用暴力反射获取。代码如下:

/**
* 通过view暴力获取getContext()(Android不支持view.getContext()了)
*
* @param view 要获取context的view
* @return 返回一个activity
*/
public static Activity getActivity(View view) {
Activity activity = null;
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));
}
} catch (Exception e) {
e.printStackTrace();
}
} else {
activity = (Activity) view.getContext();
}
return activity;
}


这样就可以了

[b]拿出微信 扫码关注下面的微信订阅号,及时获取更多推送文章
[/b]





关注后按照下面回复获取福利

1、回复“view大全”获取view的高清全部子类图

2、回复“ViewGroup”获取ViewGroup的高清[b]全部子类图


3、回复“TextView”获取TextView的高清全部子类图

4、回复“FrameLayout”获取FrameLayout的高清全部子类图

5、回复“LinearLayout”获取LinearLayout的高清全部子类图

6、回复“ImageView”获取ImageView的高清全部子类图[/b]

7、回复“小车”获取观看无线智能遥控小车
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐