j***@lvluokeji.cn
j***@lvluokeji.cn
  • 发布:2025-01-14 10:06
  • 更新:2025-01-14 17:25
  • 阅读:43

【报Bug】uts中加入webview就会闪退,inflating class android.webkit.WebView

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Mac

PC开发环境操作系统版本号: 15.1

手机系统: Android

手机系统版本号: Android 7.1.1

手机厂商: 商米收银机

手机机型: S2CC

页面类型: nvue

vue版本: vue3

打包方式: 云端

项目创建方式: CLI

CLI版本号: 3.0.0-4030620241128001

示例代码:
// index.uts  

import Presentation from "android.app.Presentation";  
import Display from "android.view.Display";  
import Context from "android.content.Context";  
import Bundle from "android.os.Bundle";  
import R from 'io.dcloud.uni_modules.uts_sunmi_client.R';  

class WebPresentation extends Presentation {  
    constructor(outerContext : Context, display : Display, url : string) {  
        super(outerContext, display)  
    }  

    override onCreate(savedInstanceState ?: Bundle) {  
        super.onCreate(savedInstanceState);  

        //自设布局  
        setContentView(R.layout.main_activity);  

    }  
}  

// 获取第二块屏幕  
export function getPresentationDisplays() : Display | null {  
    const context = UTSAndroid.getAppContext();  

    if (context === null) {  
        return null  
    }  

    const mDisplayManager = context.getSystemService(Context.DISPLAY_SERVICE) as DisplayManager;  

    const displays = mDisplayManager.getDisplays()  

    const displayList = Array.fromNative(displays)  

    for (let i = 0; i < displayList.length; i = i + 1) {  
        const display = displayList[i] as Display;  
        console.log("屏幕" + displayList[i] as Display)  
        if(i==1){  
            return display  
        }  
    }  

    return null;  
}  

export function showTextDisplay(url : string) : IRes {  
    const activity = UTSAndroid.getUniActivity();  

    if (activity === null) {  
        return { code: 400, msg: 'activity is null' }  
    }  

    const presentationDisplay = getPresentationDisplays()  

    if (presentationDisplay != null) {  
        const textDisplay = new WebPresentation(activity, presentationDisplay, url);  
        textDisplay.show();  

        return { code: 0, msg: 'success' }  
    }  
    return { code: 200, msg: '没有副屏' }  
}
// res/layout/main_activity.xml  

<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal"  
    android:layout_width="match_parent" android:layout_height="match_parent">  
    <WebView android:id="@+id/webview" android:layout_width="match_parent" android:layout_height="match_parent" />  
</LinearLayout>
// index.nvue  

onMounted(() => {  
        showTextDisplay('http://www.baidu.com')  
    });  

操作步骤:

运行代码

预期结果:

副屏展示网页

实际结果:

软件闪退

bug描述:

希望在副屏上加载一个网页,运行到setContentView(R.layout.main_activity);的时候软件就会闪退,看日志报错 reportJSException >>>> exception function:createInstanceContext, exception:white screen cause create instanceContext failed,check js stack ->Uncaught Error: targetMethod error::android.view.InflateException: Binary XML file line #4: Binary XML file line #4: Error inflating class android.webkit.WebView,试了模拟器和真机都会出现这个问题

2025-01-14 10:06 负责人:无 分享
已邀请:
DCloud_Android_DQQ

DCloud_Android_DQQ

这个报错是说 xml 标签中的webview 标签不能正确加载。

Uncaught Error: targetMethod error::android.view.InflateException: Binary XML file line #4: Binary XML file line #4: Error inflating class android.webkit.WebView,

你先确保你的布局文件在原生环境中可以正常使用

  • j***@lvluokeji.cn (作者)

    试过了在原生环境是没问题的,用uts实现就会出现这个问题,图放评论里了

    2025-01-14 12:28

j***@lvluokeji.cn

j***@lvluokeji.cn (作者)

原生布局可以打开

DCloud_Android_DQQ

DCloud_Android_DQQ

提供一下可以复现问题的最简示例

要回复问题请先登录注册