Commit 5b3f0dc5 authored by p x's avatar p x
Browse files

解决模型不能加载的问题

parent 6a41fa11
......@@ -51,6 +51,7 @@ dependencies {
androidTestImplementation(libs.androidx.junit)
androidTestImplementation(libs.androidx.espresso.core)
implementation("androidx.webkit:webkit:1.15.0")
// ViewModel + coroutines
implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2")
// Hilt dependencies
......
......@@ -25,7 +25,7 @@ class JsApi {
@JavascriptInterface
fun writeLog(msg: Object) {
println("------------writeLog ${msg}")
// println("------------writeLog ${msg}")
mainVM?.writeLog(msg.toString())
// FileIoUtils.writeToFile(gson.toJson(perceptionBean), "PerTarget_15_move.txt")
}
......
......@@ -14,11 +14,15 @@ import android.webkit.WebView
import android.webkit.WebViewClient
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.webkit.WebResourceErrorCompat
import androidx.webkit.WebViewAssetLoader
import androidx.webkit.WebViewClientCompat
import com.sd.geelyhmiweb.databinding.ActivityMainBinding
import com.sd.geelyhmiweb.viewmodels.MainVM
import dagger.hilt.android.AndroidEntryPoint
import kotlin.getValue
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
......@@ -26,6 +30,13 @@ class MainActivity : AppCompatActivity() {
private val mainVM: MainVM by viewModels()
private lateinit var assetLoader: WebViewAssetLoader
override fun onDestroy() {
super.onDestroy()
binding.dwebview.destroy()
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
......@@ -38,6 +49,13 @@ class MainActivity : AppCompatActivity() {
var jsApi = JsApi()
jsApi.mainVM = mainVM
assetLoader = WebViewAssetLoader.Builder()
.setHttpAllowed(true)
.addPathHandler("/assets/", WebViewAssetLoader.AssetsPathHandler(this))
.build()
binding.dwebview.clearCache(true)
binding.dwebview.clearHistory()
binding.dwebview.addJavascriptObject(jsApi, null)
// DWebView.setWebContentsDebuggingEnabled(true)
binding.dwebview.settings.run {
......@@ -45,32 +63,47 @@ class MainActivity : AppCompatActivity() {
javaScriptEnabled = true
javaScriptCanOpenWindowsAutomatically = true
loadWithOverviewMode = true
pluginState = WebSettings.PluginState.ON
domStorageEnabled = true
setAllowFileAccess(true)
setAllowContentAccess(true)
databaseEnabled = true
//解决跨域问题
setAllowFileAccessFromFileURLs(true)
setAllowUniversalAccessFromFileURLs(true)
// 关键:禁用文件访问,强制走 AssetLoader 路由
setAllowFileAccess(false)
setAllowContentAccess(false)
setAllowFileAccessFromFileURLs(false)
setAllowUniversalAccessFromFileURLs(false)
// 混合内容模式(若前端有 HTTP 资源,需配置;正式环境建议仅 HTTPS)
setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW)
// 关键:禁用WebView的DNS缓存,强制走拦截逻辑
setCacheMode(WebSettings.LOAD_NO_CACHE)
// 禁用网络加载(仅加载本地资产)
blockNetworkLoads = true
}
val url = "file:///android_asset/dist/index.html"
// val url = "http://192.168.60.244:5100/#/"
// val url = "http://192.168.60.155:5173/"
val websiteUrl = "http://appassets.androidplatform.net/assets/dist/index.html"
binding.dwebview.loadUrl(url)
binding.dwebview.loadUrl(websiteUrl)
binding.dwebview.webViewClient = object : WebViewClient() {
binding.dwebview.webViewClient = object : WebViewClientCompat() {
override fun shouldInterceptRequest(
view: WebView?,
view: WebView,
request: WebResourceRequest
): WebResourceResponse? {
// var headers=request.requestHeaders
// headers.put("Referer", "https://www.tianditu.gov.cn/")
// headers.put("sec-ch-ua-platform", "")
// headers.put("","Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:139.0) Gecko/20100101 Firefox/139.0")
return super.shouldInterceptRequest(view, request)
// 优先拦截虚拟域名请求
return assetLoader.shouldInterceptRequest(request.url)
// return super.shouldInterceptRequest(view, request)
}
override fun onReceivedHttpError(
view: WebView,
request: WebResourceRequest,
errorResponse: WebResourceResponse
) {
super.onReceivedHttpError(view, request, errorResponse)
}
override fun onReceivedSslError(
view: WebView?,
......@@ -78,24 +111,9 @@ class MainActivity : AppCompatActivity() {
error: SslError?
) {
// super.onReceivedSslError(view, handler, error)
handler?.proceed()
handler?.cancel()
}
override fun onReceivedError(
view: WebView?,
request: WebResourceRequest?,
error: WebResourceError?
) {
super.onReceivedError(view, request, error)
}
override fun onReceivedHttpError(
view: WebView?,
request: WebResourceRequest?,
errorResponse: WebResourceResponse?
) {
super.onReceivedHttpError(view, request, errorResponse)
}
}
binding.dwebview.webChromeClient = object : WebChromeClient() {
......
package com.sd.geelyhmiweb.viewmodels
import android.app.ActivityManager
import android.content.Context
import android.util.Log
import androidx.lifecycle.ViewModel
import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ApplicationContext
import javax.inject.Inject
@HiltViewModel
class LookInfoVM @Inject constructor(
// private var loginRepo: LoginRepo,
@ApplicationContext var context: Context
) : ViewModel() {
private val activityManager = context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
/**
* 获取当前应用的内存使用信息
*/
fun printMemoryInfo(context: Context) {
val memoryInfo = ActivityManager.MemoryInfo()
activityManager.getMemoryInfo(memoryInfo)
// 总内存
val totalMemory = memoryInfo.totalMem
// 可用内存
val availableMemory = memoryInfo.availMem
// 内存使用率
val memoryUsage = (1 - availableMemory.toDouble() / totalMemory) * 100
// 是否低内存运行
val lowMemory = memoryInfo.lowMemory
// 低内存阈值
val threshold = memoryInfo.threshold
Log.d("MemoryInfo", "总内存: " + formatSize(totalMemory))
Log.d("MemoryInfo", "可用内存: " + formatSize(availableMemory))
Log.d("MemoryInfo", "内存使用率: " + String.format("%.2f", memoryUsage) + "%")
// Log.d("MemoryInfo", "低内存状态: " + lowMemory)
// Log.d("MemoryInfo", "低内存阈值: " + formatSize(threshold))
}
private fun formatSize(size: Long): String {
if (size < 1024) {
return size.toString() + " B"
} else if (size < 1024 * 1024) {
return String.format("%.2f KB", size / 1024.0)
} else if (size < 1024 * 1024 * 1024) {
return String.format("%.2f MB", size / (1024.0 * 1024.0))
} else {
return String.format("%.2f GB", size / (1024.0 * 1024.0 * 1024.0))
}
}
}
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment