Files
pda-web/app/src/main/java/chaoran/business/activity/MainActivity.java

194 lines
6.7 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package chaoran.business.activity;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.os.Build;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.webkit.*;
import android.widget.ProgressBar;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import chaoran.business.BrandEnum;
import chaoran.business.R;
import chaoran.business.adapter.*;
import chaoran.business.vioce.TekVoiceEngine;
import chaoran.business.vioce.VoiceEngine;
/**
* 流程:联网认证设备型号,验证通过,查找设备品牌进行调用驱动操作
*/
/**
* 提供文字转语音功能实时播报PDA状态
*/
public class MainActivity extends AppCompatActivity implements ResultListener {
private WebView webView;
private Adapter adapter;
private VoiceEngine voiceEngine;
private ProgressBar progressBar;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
}
private void initData() {
BrandEnum brand = BrandEnum.code(Build.MANUFACTURER);
Toast.makeText(this, Build.MANUFACTURER, Toast.LENGTH_LONG).show();
switch (brand) {
case UROBO:
adapter = new UroBoAdapter(this, this);
break;
case ROCKCHIP:
adapter = new RockChipAdapter(this, this);
break;
case IDATA:
adapter = new IDataAdapter(this, this);
break;
case ALPS:
adapter = new AlpsAdapter(this, this);
break;
}
if (null != adapter) {
adapter.start();
}
}
@SuppressLint("JavascriptInterface")
private void initView() {
//隐藏状态栏
getSupportActionBar().hide();
voiceEngine = new TekVoiceEngine(this);
webView = findViewById(R.id.webView);
progressBar = findViewById(R.id.loading);
webView.setWebViewClient(disposeView());
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setDomStorageEnabled(true);
webView.addJavascriptInterface(voiceEngine, "VoiceEngine");
webView.loadUrl(url());
}
//配置客户端
private WebViewClient disposeView() {
return new WebViewClient() {
//页面开始加载时
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
progressBar.setVisibility(View.VISIBLE);
}
//页面加载完成时
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
progressBar.setVisibility(View.INVISIBLE);
}
//网络发生错误时,先展示错误界面,然后关闭加载条
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
switch (errorCode) {
case 404:
webView.loadUrl("file:///android_asset/error/404.html");
break;
case 500:
webView.loadUrl("file:///android_asset/error/500.html");
break;
default:
webView.loadUrl("file:///android_asset/error/index.html");
}
super.onReceivedError(view, errorCode, description, failingUrl);
progressBar.setVisibility(View.INVISIBLE);
}
//安卓6.0以上发生错误时回调
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
switch (error.getErrorCode()) {
case 404:
webView.loadUrl("file:///android_asset/error/404.html");
break;
case 500:
webView.loadUrl("file:///android_asset/error/500.html");
break;
default:
webView.loadUrl("file:///android_asset/error/index.html");
}
}
super.onReceivedError(view, request, error);
progressBar.setVisibility(View.INVISIBLE);
}
};
}
@Override
protected void onResume() {
//再次唤醒该页面时,重新加载页面和语音配置
webView.loadUrl(url());
voiceEngine.loadParam();
super.onResume();
}
@Override
@SuppressLint("SetJavaScriptEnabled")
public void result(String result) {
runOnUiThread(() -> webView.loadUrl("javascript:render(\'" + result + "\')"));
}
@Override
protected void onDestroy() {
adapter.stop();
super.onDestroy();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.action_setting_network:
startActivity(new Intent(this, NetworkSettingActivity.class));
break;
case R.id.action_setting_voice:
startActivity(new Intent(this, VoiceSettingActivity.class));
break;
case R.id.action_about:
startActivity(new Intent(this, AboutActivity.class));
break;
}
return super.onOptionsItemSelected(item);
}
private String url() {
SharedPreferences spf = this.getSharedPreferences("crtech", Context.MODE_PRIVATE);
Integer port = spf.getInt("port", -1);
if (port == -1) {
return "file:///android_asset/demo/index.html";
}
String address = spf.getString("address", "").replaceAll(" ", "");
String path = spf.getString("path", "").replaceAll(" ", "");
String link = address.concat(":").concat(String.valueOf(port)).concat(path);
return link.startsWith("http://") ? link : "http://".concat(link);
}
}