|
|
|
@ -120,19 +120,20 @@ public class WebViewActivity extends BaseActivity { |
|
|
|
//static String HtmlUrl = "http://192.168.0.106:5173/";//webServer服务地址
|
|
|
|
//static String HtmlUrl = "https://iot.1000my.com/api/application-unzip-path/v1/static/77b853bf-a43a-47ba-bc0c-0160229b6ca2/index.html?projectCode=project-ce-k6xi8vq_deqrszdepga&code=Sn9tXh8jMLd4GjfiVdInl#/";
|
|
|
|
int time = 0; |
|
|
|
String interfaceRequestData=""; |
|
|
|
// 已废弃:结果现在通过 Message.obj 传递,不再使用共享字段
|
|
|
|
// String interfaceRequestData="";
|
|
|
|
private long resumeTimeMs = 0; |
|
|
|
private static final long GO_SCREEN_SAVE_MIN_INTERVAL = 10000; // 页面加载后至少10秒才允许进入屏保
|
|
|
|
private boolean webViewAlreadyDestroyed = false; |
|
|
|
// 语音听写对象
|
|
|
|
private AICloudASREngine mEngine; |
|
|
|
private AICloudASRIntent aiCloudASRIntent; |
|
|
|
private volatile AICloudASREngine mEngine; |
|
|
|
private volatile AICloudASRIntent aiCloudASRIntent; |
|
|
|
private TTSUtil ttsUtil; |
|
|
|
private String oldString=""; |
|
|
|
|
|
|
|
// 语音听写对象
|
|
|
|
private ASR mAsr; |
|
|
|
private boolean isrun = false; // 是否正在听写
|
|
|
|
private volatile boolean isrun = false; // 是否正在听写
|
|
|
|
private KDXFUtil kxdfttsUtil; |
|
|
|
|
|
|
|
private final InnerHandler handler = new InnerHandler(this); |
|
|
|
@ -196,8 +197,11 @@ public class WebViewActivity extends BaseActivity { |
|
|
|
break; |
|
|
|
|
|
|
|
case TYPE_SHENG_HTML_MAG: |
|
|
|
activity.getHandWriting(activity.interfaceRequestData); |
|
|
|
activity.interfaceRequestData = ""; |
|
|
|
// 结果通过 msg.obj 传入,避免多次并发请求覆盖共享字段
|
|
|
|
String handWritingData = (String) msg.obj; |
|
|
|
if (handWritingData != null) { |
|
|
|
activity.getHandWriting(handWritingData); |
|
|
|
} |
|
|
|
DeviceData.saveInterfaceRequest(""); |
|
|
|
break; |
|
|
|
} |
|
|
|
@ -282,47 +286,28 @@ public class WebViewActivity extends BaseActivity { |
|
|
|
webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); |
|
|
|
} |
|
|
|
|
|
|
|
wv.setWebViewClient(new WebViewClient() { |
|
|
|
@RequiresApi(api = Build.VERSION_CODES.O) |
|
|
|
@Override |
|
|
|
public boolean onRenderProcessGone(WebView view, RenderProcessGoneDetail detail) { |
|
|
|
LoggerUtil.e("WebViewCrash", "WebView 渲染进程崩溃,OOM被杀: " + !detail.didCrash()); |
|
|
|
webViewAlreadyDestroyed = true; |
|
|
|
try { |
|
|
|
if (view != null) { |
|
|
|
ViewGroup parent = (ViewGroup) view.getParent(); |
|
|
|
if (parent != null) parent.removeView(view); |
|
|
|
view.stopLoading(); |
|
|
|
view.loadUrl("about:blank"); |
|
|
|
view.clearHistory(); |
|
|
|
view.clearCache(true); |
|
|
|
view.removeAllViews(); |
|
|
|
view.destroy(); |
|
|
|
} |
|
|
|
} catch (Exception e) { |
|
|
|
LoggerUtil.e("WebViewCrash", e.toString()); |
|
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { |
|
|
|
wv.setWebViewClient(new CrashAwareWebViewClient()); |
|
|
|
} else { |
|
|
|
wv.setWebViewClient(new WebViewClient() { |
|
|
|
@Override |
|
|
|
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { |
|
|
|
return super.shouldInterceptRequest(view, request); |
|
|
|
} |
|
|
|
ProcessPhoenix.triggerRebirth(WebViewActivity.this); |
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { |
|
|
|
return super.shouldInterceptRequest(view, request); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@TargetApi(Build.VERSION_CODES.N) |
|
|
|
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { |
|
|
|
return false; |
|
|
|
} |
|
|
|
@Override |
|
|
|
@TargetApi(Build.VERSION_CODES.N) |
|
|
|
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@SuppressWarnings("deprecation") |
|
|
|
public boolean shouldOverrideUrlLoading(WebView view, String url) { |
|
|
|
return false; |
|
|
|
} |
|
|
|
}); |
|
|
|
@Override |
|
|
|
@SuppressWarnings("deprecation") |
|
|
|
public boolean shouldOverrideUrlLoading(WebView view, String url) { |
|
|
|
return false; |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
wv.setWebChromeClient(new WebChromeClient() { |
|
|
|
public boolean onConsoleMessage(ConsoleMessage cm) { |
|
|
|
@ -576,6 +561,7 @@ public class WebViewActivity extends BaseActivity { |
|
|
|
@JavascriptInterface |
|
|
|
public void startTTS(String content) { |
|
|
|
LoggerUtil.e(TAG,"JS调用了Android的方法:startTTS()"); |
|
|
|
if (content == null || content.isEmpty()) return; |
|
|
|
if("sbc".equals(Constant.TTSHome)){ |
|
|
|
if (ttsUtil == null) return; |
|
|
|
ttsUtil.startTTs(content.toLowerCase(Locale.ENGLISH)); |
|
|
|
@ -614,9 +600,11 @@ public class WebViewActivity extends BaseActivity { |
|
|
|
DeviceData.queryOfflineDataByInterfaceToPost(WebViewActivity.this, url, map, new QueryFinishListener() { |
|
|
|
@Override |
|
|
|
public void onFinish() { |
|
|
|
if(state){ |
|
|
|
interfaceRequestData = DeviceData.getInterfaceRequestData(); |
|
|
|
handler.sendEmptyMessage(TYPE_SHENG_HTML_MAG); |
|
|
|
if (state) { |
|
|
|
// 结果随 Message 传递,避免并发请求覆盖同一个共享字段
|
|
|
|
Message msg = handler.obtainMessage(TYPE_SHENG_HTML_MAG); |
|
|
|
msg.obj = DeviceData.getInterfaceRequestData(); |
|
|
|
handler.sendMessage(msg); |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
@ -625,17 +613,16 @@ public class WebViewActivity extends BaseActivity { |
|
|
|
// h5调用android:接口请求get
|
|
|
|
@JavascriptInterface |
|
|
|
public void interfaceRequest(String url , boolean state) { |
|
|
|
|
|
|
|
DeviceData.queryOfflineDataByInterfaceToGet(WebViewActivity.this, url, new QueryFinishListener() { |
|
|
|
@Override |
|
|
|
public void onFinish() { |
|
|
|
if(state){ |
|
|
|
interfaceRequestData = DeviceData.getInterfaceRequestData(); |
|
|
|
handler.sendEmptyMessage(TYPE_SHENG_HTML_MAG); |
|
|
|
if (state) { |
|
|
|
Message msg = handler.obtainMessage(TYPE_SHENG_HTML_MAG); |
|
|
|
msg.obj = DeviceData.getInterfaceRequestData(); |
|
|
|
handler.sendMessage(msg); |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
// LoggerUtil.e(TAG,"JS调用了Android的方法:interfaceRequest2():"+url);
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -673,14 +660,15 @@ public class WebViewActivity extends BaseActivity { |
|
|
|
* android调用js:传送识别语音内容 |
|
|
|
* */ |
|
|
|
public void voiceContent(String msg) { |
|
|
|
if (webView != null) { |
|
|
|
LoggerUtil.e(TAG, "android调用js方法:giveAskText(),语音内容:" + msg); |
|
|
|
runOnUiThread(() -> { |
|
|
|
if (webView != null) { |
|
|
|
webView.loadUrl(StringUtil.strSplice("javascript:window.giveAskText('" + msg + "');")); |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
if (webView == null) return; |
|
|
|
LoggerUtil.e(TAG, "android调用js方法:giveAskText(),语音内容:" + msg); |
|
|
|
// evaluateJavascript + JSONObject.quote 避免 msg 含单引号/反斜杠时 JS 语法崩溃
|
|
|
|
String jsArg = org.json.JSONObject.quote(msg != null ? msg : ""); |
|
|
|
runOnUiThread(() -> { |
|
|
|
if (webView != null) { |
|
|
|
webView.evaluateJavascript("window.giveAskText(" + jsArg + ");", null); |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
@ -940,4 +928,46 @@ public class WebViewActivity extends BaseActivity { |
|
|
|
}); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
@RequiresApi(api = Build.VERSION_CODES.O) |
|
|
|
private class CrashAwareWebViewClient extends WebViewClient { |
|
|
|
@Override |
|
|
|
public boolean onRenderProcessGone(WebView view, RenderProcessGoneDetail detail) { |
|
|
|
LoggerUtil.e("WebViewCrash", "WebView 渲染进程崩溃,OOM被杀: " + !detail.didCrash()); |
|
|
|
webViewAlreadyDestroyed = true; |
|
|
|
try { |
|
|
|
if (view != null) { |
|
|
|
ViewGroup parent = (ViewGroup) view.getParent(); |
|
|
|
if (parent != null) parent.removeView(view); |
|
|
|
view.stopLoading(); |
|
|
|
view.loadUrl("about:blank"); |
|
|
|
view.clearHistory(); |
|
|
|
view.clearCache(true); |
|
|
|
view.removeAllViews(); |
|
|
|
view.destroy(); |
|
|
|
} |
|
|
|
} catch (Exception e) { |
|
|
|
LoggerUtil.e("WebViewCrash", e.toString()); |
|
|
|
} |
|
|
|
ProcessPhoenix.triggerRebirth(WebViewActivity.this); |
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { |
|
|
|
return super.shouldInterceptRequest(view, request); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@TargetApi(Build.VERSION_CODES.N) |
|
|
|
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@SuppressWarnings("deprecation") |
|
|
|
public boolean shouldOverrideUrlLoading(WebView view, String url) { |
|
|
|
return false; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|