Android 11的另一个突破性变化。
Caused by: java.lang.UnsupportedOperationException: Tried to obtain display from a Context not associated with one. Only visual Contexts (such as Activity or one created with Context#createWindowContext) or ones created with Context#createDisplayContext are associated with displays. Other types of Contexts are typically related to background entities and may return an arbitrary display.我有一个自定义的RecyclerView,这是错误发生时的流。
public AutoPlayVideoRecyclerView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
initView(context);
}
private void initView(Context context) {
heightScreen = getHeightScreen(context); ...
private int getHeightScreen(Context context) {
return RealDisplayMetricsUtil.getDeviceRealHeight(context);
}
public class RealDisplayMetricsUtil {
public static int getDeviceRealHeight(Context context){
DisplayMetrics displayMetrics = new DisplayMetrics();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R)
context.getDisplay().getRealMetrics(displayMetrics);
else {
WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
windowManager.getDefaultDisplay().getRealMetrics(displayMetrics);
}
return displayMetrics.heightPixels;
}错误从此处开始
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R)
context.getDisplay().getRealMetrics(displayMetrics);发布于 2021-09-25 19:26:31
我不认为上面的代码有什么不同,因为这两个都在Android SDK 31中被弃用了,所以我只是完全删除了这个条件来解决这个问题。这不是最终的答案,但它应该在一段时间内有效。在这里自由添加新的解决方案,我将在审查和测试后将其标记为答案。
DisplayMetrics displayMetrics = new DisplayMetrics();
WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
windowManager.getDefaultDisplay().getRealMetrics(displayMetrics);
return displayMetrics.heightPixels;https://stackoverflow.com/questions/69150674
复制相似问题