Created
October 14, 2020 01:06
-
-
Save 330132662/1f3aac8a98b305596b8fe1aa8737f7d2 to your computer and use it in GitHub Desktop.
js 接口
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.blue.tooth.lock; | |
import android.annotation.SuppressLint; | |
import android.app.Activity; | |
import android.content.Context; | |
import android.graphics.Bitmap; | |
import android.graphics.drawable.AnimationDrawable; | |
import android.os.Bundle; | |
import android.util.Log; | |
import android.view.KeyEvent; | |
import android.view.View; | |
import android.webkit.ConsoleMessage; | |
import android.webkit.JavascriptInterface; | |
import android.webkit.JsResult; | |
import android.webkit.WebChromeClient; | |
import android.webkit.WebSettings; | |
import android.webkit.WebView; | |
import android.webkit.WebViewClient; | |
import android.widget.Button; | |
import android.widget.EditText; | |
import android.widget.ImageView; | |
import android.widget.LinearLayout; | |
import android.widget.TextView; | |
import android.widget.Toast; | |
import androidx.annotation.Nullable; | |
import androidx.appcompat.app.AppCompatActivity; | |
import com.blue.tooth.lock.util.AppCache; | |
import com.blue.tooth.lock.util.BleSendDataUtil; | |
import com.blue.tooth.lock.util.ToastUtils; | |
import com.meihua.passivelock.BLEConnectCallback; | |
import com.meihua.passivelock.BLETools; | |
import com.meihua.passivelock.BleLockProCallback; | |
import com.meihua.passivelock.LogInfoVo; | |
import com.meihua.passivelock.TaskDataVo; | |
import com.meihua.passivelock.fastble.BleManager; | |
import com.meihua.passivelock.fastble.data.BleDevice; | |
import com.tencent.bugly.beta.Beta; | |
import java.util.concurrent.locks.Lock; | |
/** | |
* author: jiangliqiang | |
* date: 2020/09/21 | |
* 连接钥匙 | |
* 1 需要实现BLEConnectCallback 蓝牙连接的回调接口 | |
* 2 需要实现BleLockProCallback 锁具通信的回调接口 | |
*/ | |
public class ConnectKeyAct extends Activity implements View.OnClickListener, BLEConnectCallback, BleLockProCallback { | |
private WebView mWebView; | |
@Override | |
protected void onCreate(@Nullable Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.act_lock_detail); | |
Beta.checkUpgrade(); | |
this.buildView(); | |
this.buildListener(); | |
this.connect(); | |
initView(); | |
} | |
@SuppressLint("SetJavaScriptEnabled") | |
private void initView() { | |
//加载网页链接 | |
String url = "http://zhuoc.zczny.com/index/people/index"; | |
// String url = "http://srg.quanjing-vr.com/index.php?s=/wap/index/index2"; | |
//加载本地assets目录下的网页 | |
// webView.loadUrl("file:///android_asset/keithxiaoy.html"); | |
//加载手机本地的html页面 | |
// webView.loadUrl("content://com.android.htmlfileprovider/sdcard/keithxiaoy.html"); | |
//加载 HTML 页面的一小段内容。参数1:需要截取展示的内容、参数2:展示内容的类型、参数3:字节码 | |
// webView.loadData(String data, String mimeType, String encoding) | |
WebSettings webSettings = mWebView.getSettings(); | |
//如果访问的页面中要与Javascript交互,则webview必须设置支持Javascript | |
webSettings.setJavaScriptEnabled(true); | |
// 若加载的 html 里有JS 在执行动画等操作,会造成资源浪费(CPU、电量) | |
// 在 onStop 和 onResume 里分别把 setJavaScriptEnabled() 给设置成 false 和 true 即可 | |
//支持插件 | |
// webSettings.setPluginsEnabled(true); | |
//设置自适应屏幕,两者合用 | |
webSettings.setUseWideViewPort(true); //将图片调整到适合webview的大小 | |
webSettings.setLoadWithOverviewMode(true); // 缩放至屏幕的大小 | |
//缩放操作 | |
webSettings.setSupportZoom(true); //支持缩放,默认为true。是下面那个的前提。 | |
webSettings.setBuiltInZoomControls(true); //设置内置的缩放控件。若为false,则该WebView不可缩放 | |
webSettings.setDisplayZoomControls(false); //隐藏原生的缩放控件 | |
//其他细节操作 | |
webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); //关闭webview中缓存 | |
webSettings.setAllowFileAccess(true); //设置可以访问文件 | |
webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口 | |
webSettings.setLoadsImagesAutomatically(true); //支持自动加载图片 | |
webSettings.setDefaultTextEncodingName("utf-8");//设置编码格式 | |
mWebView.setWebViewClient(new WebViewClient() { | |
@Override | |
public void onPageStarted(WebView view, String url, Bitmap favicon) { | |
super.onPageStarted(view, url, favicon); | |
Log.d("KeithXiaoY", "开始加载"); | |
} | |
@Override | |
public void onPageFinished(WebView view, String url) { | |
super.onPageFinished(view, url); | |
Log.d("KeithXiaoY", "加载结束"); | |
} | |
// 链接跳转都会走这个方法 | |
@Override | |
public boolean shouldOverrideUrlLoading(WebView view, String url) { | |
Log.d("KeithXiaoY", "Url:" + url); | |
view.loadUrl(url);// 强制在当前 WebView 中加载 url | |
return true; | |
} | |
}); | |
mWebView.clearCache(true); | |
mWebView.clearHistory(); | |
mWebView.setWebChromeClient(new WebChromeClient() { | |
@Override | |
public void onProgressChanged(WebView view, int newProgress) { | |
super.onProgressChanged(view, newProgress); | |
Log.d("KeithXiaoY", "newProgress:" + newProgress); | |
} | |
@Override | |
public void onReceivedTitle(WebView view, String title) { | |
super.onReceivedTitle(view, title); | |
Log.d("KeithXiaoY", "标题:" + title); | |
} | |
@Override | |
public boolean onJsAlert(WebView view, String url, String message, JsResult result) { | |
ToastUtils.show(getApplicationContext(), "onJsAlert"); | |
connect(); | |
return super.onJsAlert(view, url, message, result); | |
} | |
@Override | |
public boolean onConsoleMessage(ConsoleMessage consoleMessage) { | |
ToastUtils.show(getApplicationContext(), consoleMessage.message()); | |
return super.onConsoleMessage(consoleMessage); | |
} | |
}); | |
initJsApi(); | |
mWebView.loadUrl(url); | |
} | |
private void initJsApi() { | |
//核心方法, 用于处理JavaScript被执行后的回调 | |
// mWebView.addJavascriptInterface(new AndroidtoJs(this), "zhuochuang"); | |
mWebView.addJavascriptInterface(new AndroidApi(), "zhuochuang"); | |
} | |
class AndroidApi { | |
@JavascriptInterface | |
public void conncetBle() { | |
connect(); //连接操作,用不到了 2020年9月27日10:39:19 | |
} | |
@JavascriptInterface | |
public void initLock(String mLockCode) { | |
initKey(mLockCode);// 初始化锁 | |
} | |
@JavascriptInterface | |
public void authLock(String userId, String start, String end) { | |
ToastUtils.show(getApplicationContext(), "authLock"); | |
authAction(userId, start, end);// 授权 | |
} | |
/** | |
* 清除授权 | |
*/ | |
@JavascriptInterface | |
public void clearAuthApi() { | |
clearAuth(); // 清除授权 | |
} | |
@JavascriptInterface | |
public void clearLock(String lockCode) { | |
clearLockApi(lockCode); // 清除授权 | |
} | |
@JavascriptInterface | |
public void getLockInfo() { | |
getLockInfoApi(); // 清除授权 | |
} | |
@JavascriptInterface | |
public void disConnect() { | |
bleTools.disConnect(); // 清除授权 | |
} | |
} | |
private void clearLockApi(String lockCode) { | |
type = 3; | |
// BleSendDataUtil.resetLock(bleTools, LOCK_CODE, mac); | |
BleSendDataUtil.resetLock(bleTools, lockCode, mac); | |
} | |
private void clearAuth() { | |
log.setText("准备清空授权"); | |
type = 2; | |
Log.i(TAG, "cancelAuth"); | |
BleSendDataUtil.cleanAuth(bleTools); | |
} | |
private void getLockInfoApi() { | |
bleTools.setLockRespCallBack(new BleLockProCallback() { | |
@Override | |
public void bindKeyCallback(boolean b) { | |
} | |
@Override | |
public void verificationTimeCallback(boolean b, boolean b1) { | |
} | |
@Override | |
public void dumpEnergyCallBack(int i) { | |
} | |
@Override | |
public void authKeyCallBack(boolean b) { | |
} | |
@Override | |
public void initLockCallBack(boolean b) { | |
} | |
@Override | |
public void getKeyLogCallBack(LogInfoVo logInfoVo) { | |
if (logInfoVo != null) { | |
Log.d("LOCKK", logInfoVo.lockCode); | |
Log.d("LOCKK", logInfoVo.lockMac); | |
Log.d("LOCKK", logInfoVo.logNub); | |
Log.d("LOCKK", logInfoVo.toString()); | |
} | |
} | |
@Override | |
public void lockInfoCallBack(String s) { | |
ToastUtils.show(ConnectKeyAct.this, s, Toast.LENGTH_LONG); | |
} | |
}); | |
bleTools.getLockInfo(); | |
bleTools.getLockLog(); | |
} | |
private void buildView() { | |
mWebView = findViewById(R.id.web); | |
lockName = findViewById(R.id.lockName); | |
lockMac = findViewById(R.id.lockMac); | |
electricNum = findViewById(R.id.electricNum); | |
connectStatus = findViewById(R.id.connectStatus); | |
initLock = findViewById(R.id.initLock); | |
auth = findViewById(R.id.auth); | |
cancelAuth = findViewById(R.id.cancelAuth); | |
loadText = findViewById(R.id.loadText); | |
iv_running = findViewById(R.id.iv_running); | |
loadingBox = findViewById(R.id.loadingBox); | |
lockCodeEt = findViewById(R.id.lockCodeEt); | |
clearLock = findViewById(R.id.clearLock); | |
back = findViewById(R.id.back); | |
log = findViewById(R.id.log); | |
lockCode = findViewById(R.id.lockCode); | |
getLockInfo = findViewById(R.id.getLockInfo); | |
getOpenLockInfo = findViewById(R.id.getOpenLockInfo); | |
Bundle bundle = getIntent().getExtras(); | |
String name = bundle.getString("name"); | |
mac = bundle.getString("mac"); | |
lockName.setText("锁具名称:" + name); | |
} | |
public boolean onKeyDown(int keyCode, KeyEvent event) { | |
if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) { | |
mWebView.goBack(); | |
return true; | |
} | |
return super.onKeyDown(keyCode, event); | |
} | |
private void buildListener() { | |
initLock.setOnClickListener(this); | |
auth.setOnClickListener(this); | |
cancelAuth.setOnClickListener(this); | |
back.setOnClickListener(this); | |
getOpenLockInfo.setOnClickListener(this); | |
getLockInfo.setOnClickListener(this); | |
clearLock.setOnClickListener(this); | |
} | |
; | |
private void connect() { | |
loadText.setText("正在连接蓝牙"); | |
loadingBox.setVisibility(View.VISIBLE); | |
this.startScanAnim(); | |
if (bleTools == null) { | |
bleTools = new BLETools(); | |
bleTools.setConnectCallBack(this); | |
bleTools.setLockRespCallBack(this); | |
} | |
bleTools.connect(AppCache.getBleDevice()); | |
} | |
private void startScanAnim() { | |
iv_running.setVisibility(View.VISIBLE); | |
anim = (AnimationDrawable) iv_running.getDrawable(); | |
iv_running.post(new Runnable() { | |
@Override | |
public void run() { | |
anim.start(); | |
} | |
}); | |
} | |
@Override | |
protected void onResume() { | |
super.onResume(); | |
} | |
@Override | |
protected void onDestroy() { | |
super.onDestroy(); | |
if (connectDevice != null) { | |
BleManager.getInstance().disconnect(connectDevice); | |
} | |
} | |
@Override | |
public void onClick(View v) { | |
switch (v.getId()) { | |
case R.id.initLock: | |
initKey(""); | |
break; | |
case R.id.auth: | |
authAction("99999", "", ""); | |
break; | |
case R.id.cancelAuth: | |
clearAuth(); | |
break; | |
case R.id.getOpenLockInfo: | |
log.setText("准备获取日志"); | |
logSb.setLength(0); | |
BleSendDataUtil.getKeyLogCallBack(bleTools); | |
break; | |
case R.id.back: | |
finish(); | |
break; | |
case R.id.getLockInfo: | |
bleTools.getLockInfo(); | |
break; | |
case R.id.clearLock: | |
clearLockApi(LOCK_CODE); | |
break; | |
} | |
} | |
private void initKey(String mLockCode) { | |
log.setText("准备向锁授权"); | |
if (mLockCode.equals("")) { | |
mLockCode = LOCK_CODE; | |
} | |
// String edLockCode = lockCodeEt.getText().toString(); | |
// if(edLockCode!=null&&!edLockCode.equals("")){ | |
// mLockCode = edLockCode; | |
// } | |
Log.i(TAG, "mLockCode:" + mLockCode); | |
BleSendDataUtil.initLock(bleTools, mLockCode); | |
} | |
/** | |
* @param userId 999 | |
* @param start 20200922120000 | |
* @param end 20201222120000 | |
*/ | |
private void authAction(String userId, String start, String end) { | |
// log.setText("准备授权"); | |
ToastUtils.show(this, "欢迎" + userId); | |
type = 1; | |
String lockCode = LOCK_CODE; | |
lockCode = lockCode.replaceAll(":", ""); | |
BleSendDataUtil.authAction(bleTools, userId, lockCode, mac, start, end); | |
// BleSendDataUtil.authAction(bleTools,USERID,lockCode,mac,"20200922120000","20201222120000"); | |
} | |
//蓝牙连接成功 | |
@Override | |
public void connectSuccess(BleDevice bleDevice) { | |
anim.stop(); | |
loadingBox.setVisibility(View.GONE); | |
this.connectDevice = bleDevice; | |
connectStatus.setText("连接状态:连接成功"); | |
BleSendDataUtil.bindKey(bleTools, USERID); | |
} | |
private void enabledButton() { | |
initLock.setEnabled(true); | |
initLock.setBackgroundResource(R.drawable.login_btn_selector); | |
auth.setEnabled(true); | |
auth.setBackgroundResource(R.drawable.login_btn_selector); | |
cancelAuth.setEnabled(true); | |
cancelAuth.setBackgroundResource(R.drawable.login_btn_selector); | |
getOpenLockInfo.setEnabled(true); | |
getOpenLockInfo.setBackgroundResource(R.drawable.login_btn_selector); | |
getLockInfo.setEnabled(true); | |
getLockInfo.setBackgroundResource(R.drawable.login_btn_selector); | |
clearLock.setEnabled(true); | |
clearLock.setBackgroundResource(R.drawable.login_btn_selector); | |
} | |
//蓝牙连接失败 | |
@Override | |
public void connectFailed() { | |
anim.stop(); | |
loadingBox.setVisibility(View.GONE); | |
connectDevice = null; | |
connectStatus.setText("连接状态:连接失败"); | |
} | |
//蓝牙断开连接 | |
@Override | |
public void onDisConnected(BleDevice bleDevice) { | |
loadingBox.setVisibility(View.GONE); | |
connectDevice = null; | |
connectStatus.setText("连接状态:断开"); | |
} | |
//用户id与钥匙绑定回调 | |
@Override | |
public void bindKeyCallback(boolean isBindSuccess) { | |
if (isBindSuccess) { | |
log.setText("钥匙绑定成功"); | |
BleSendDataUtil.setKeyTime(bleTools); | |
} else { | |
log.setText("钥匙绑定失败"); | |
} | |
} | |
//校时回调 | |
@Override | |
public void verificationTimeCallback(boolean isVerificationTimeSuccess, boolean isOnline) { | |
if (isVerificationTimeSuccess) { | |
log.setText("时间校验成功"); | |
} else { | |
log.setText("时间校验失败"); | |
} | |
BleSendDataUtil.getElectricity(bleTools); | |
} | |
//电量回调 | |
@Override | |
public void dumpEnergyCallBack(int dumpEnergy) { | |
if (dumpEnergy > 100) { | |
dumpEnergy = 100; | |
} | |
electricNum.setText("锁具电量:" + dumpEnergy + "%"); | |
enabledButton(); | |
} | |
//授权回调 | |
@Override | |
public void authKeyCallBack(boolean isAuthSuccess) { | |
Log.i(TAG, "isAuthSuccess:" + isAuthSuccess); | |
String msg = ""; | |
if (isAuthSuccess) { | |
if (type == 3) { | |
Toast.makeText(this, "将钥匙插入锁芯,听到 滴滴 两声代表清除成功", Toast.LENGTH_LONG); | |
finish(); | |
return; | |
} | |
if (type == 1) { | |
msg = "授权成功"; | |
log.setText(msg); | |
} else if (type == 2) { | |
msg = "清除授权成功"; | |
log.setText(msg); | |
} | |
} else { | |
if (type == 1) { | |
msg = "授权失败"; | |
} else if (type == 2) { | |
msg = "清除授权失败"; | |
} else if (type == 3) { | |
msg = "清除锁芯失败"; | |
} | |
log.setText(msg); | |
} | |
} | |
//初始化锁具回调 | |
@Override | |
public void initLockCallBack(boolean isSuccess) { | |
if (isSuccess) { | |
log.setText("初始化锁具成功"); | |
} else { | |
log.setText("初始化锁具失败"); | |
} | |
} | |
@Override | |
public void getKeyLogCallBack(LogInfoVo logInfoVo) { | |
if (logInfoVo == null) { | |
if (logSb.length() == 0) { | |
log.setText("没有日志"); | |
} | |
return; | |
} | |
logSb.append("用户:").append(logInfoVo.logNub).append(","); | |
logSb.append(logInfoVo.openTime); | |
if (logInfoVo.openType.equals("00")) { | |
if (logInfoVo.result.equals("01")) { | |
logSb.append(" 关锁成功"); | |
} else { | |
logSb.append(" 关锁失败"); | |
} | |
} else if (logInfoVo.openType.equals("01")) { | |
if (logInfoVo.result.equals("01")) { | |
logSb.append(" 开锁成功"); | |
} else { | |
logSb.append(" 开锁失败"); | |
} | |
} else if (logInfoVo.openType.equals("01")) { | |
logSb.append(" 清除锁识别号"); | |
} else { | |
logSb.append(" 执行:").append(logInfoVo.openType); | |
} | |
logSb.append("\r\n"); | |
log.setText(logSb.toString()); | |
BleSendDataUtil.getKeyLogCallBack(bleTools);//重复读取日志,直到logInfoVo为空 | |
} | |
@Override | |
public void lockInfoCallBack(String lockMac) { | |
lockCode.setText("锁具信息:" + lockMac); | |
// log.setText("锁具mac-16进制:" + lockMac); | |
} | |
//蓝牙相关 | |
private BLETools bleTools; | |
private BleDevice connectDevice;//连接成功的蓝牙 | |
private AnimationDrawable anim; | |
private final String TAG = "ConnectKeyAct:"; | |
private final String USERID = "9999";//99999999 | |
private final String LOCK_CODE = "0050:0001:0010:0000:1a2b:0000:0000:0000";//0033:0001:0008:0000:1d25:0000:0000:0000 | |
private String mac; | |
private int type = 0; | |
private StringBuffer logSb = new StringBuffer(); | |
private TextView loadText; | |
private ImageView iv_running; | |
private TextView log; | |
private TextView lockName; | |
private TextView lockMac; | |
private TextView electricNum; | |
private TextView connectStatus; | |
private Button initLock; | |
private Button auth; | |
private Button cancelAuth; | |
private Button getOpenLockInfo; | |
private LinearLayout loadingBox; | |
private Button getLockInfo; | |
private Button clearLock; | |
private TextView back; | |
private EditText lockCodeEt; | |
private TextView lockCode; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment