From 6e0f29b08a040d14576d7053c1206a8439936570 Mon Sep 17 00:00:00 2001
From: yy1717 <fctom1215@outlook.com>
Date: 星期二, 24 十一月 2020 14:18:03 +0800
Subject: [PATCH] 坐标
---
lib/src/main/java/com/anyun/exam/lib/RemoteService.java | 165 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 162 insertions(+), 3 deletions(-)
diff --git a/lib/src/main/java/com/anyun/exam/lib/RemoteService.java b/lib/src/main/java/com/anyun/exam/lib/RemoteService.java
index 76ec97f..f368d69 100644
--- a/lib/src/main/java/com/anyun/exam/lib/RemoteService.java
+++ b/lib/src/main/java/com/anyun/exam/lib/RemoteService.java
@@ -1,22 +1,31 @@
package com.anyun.exam.lib;
+import android.Manifest;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
+import android.content.pm.PackageManager;
import android.database.Cursor;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.Ringtone;
import android.media.RingtoneManager;
import android.net.Uri;
+import android.os.Build;
+import android.os.Handler;
import android.os.IBinder;
+import android.os.Message;
import android.os.Process;
import android.os.RemoteCallbackList;
import android.os.RemoteException;
import android.util.Base64;
import android.util.Log;
+import com.anyun.exam.lib.util.Bluetooth;
+import com.anyun.exam.lib.util.BluetoothChatService;
+import com.anyun.exam.lib.util.BluetoothChatServiceCallback;
+import com.anyun.exam.lib.util.Constants;
import com.anyun.exam.lib.util.DESUtil;
import com.anyun.exam.lib.util.NetUtils;
import com.anyun.exam.lib.util.ProperUtil;
@@ -24,6 +33,8 @@
import com.anyun.exam.lib.util.SpeakerCallback;
import androidx.annotation.Nullable;
+import androidx.core.app.ActivityCompat;
+import androidx.core.content.ContextCompat;
import java.io.IOException;
import java.io.InputStream;
@@ -32,6 +43,9 @@
import java.util.ArrayList;
import java.util.Properties;
import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.regex.Pattern;
+
+import static android.content.pm.PackageManager.PERMISSION_GRANTED;
/**
* MyApplication2
@@ -52,6 +66,13 @@
private Uri ringUri = null;
private Upgrade upgrade = null;
+
+ private Bluetooth mBluetooth = null;
+ private BluetoothChatService mChatService = null;
+ private String mConnectedDeviceName = null;
+ private String mTargetBluetooth = null;
+ private String mTargetBluetoothAddr = null;
+ private boolean mDiscoveryBluetooth = false;
private IRemoteInterface.Stub iRemoteInterface = new IRemoteInterface.Stub(){
@Override
@@ -75,7 +96,7 @@
if (cmd == 0x8100) {
try {
byte [] file = value.getBytes("ISO-8859-1");
- Log.d(TAG, byte2hex(file));
+// Log.d(TAG, byte2hex(file));
MainProcBinMsgEntry(cmd, file, file.length);
} catch (UnsupportedEncodingException e) {
Log.d(TAG, "UnsupportedEncodingException");
@@ -102,7 +123,7 @@
new Thread(new TestThread()).start();
- new Thread(new AutoUpdateMcuThread(this)).start();
+// new Thread(new AutoUpdateMcuThread(this)).start();
upgrade = Upgrade.getInstance(getApplicationContext());
upgrade.CheckUpgrade();
@@ -114,6 +135,11 @@
Log.d(TAG, "鍩哄甫鐗堟湰 " + getBaseband_Ver());
String ver = getBaseband_Ver();
+
+ mBluetooth = Bluetooth.getInstance(getApplicationContext(), mHandler);
+ mBluetooth.OpenBluetooth();
+ // Initialize the BluetoothChatService to perform mBluetooth connections
+ mChatService = new BluetoothChatService(this, mHandler);
}
class AutoUpdateMcuThread implements Runnable {
@@ -232,7 +258,10 @@
@Override
public void run() {
try {
- Thread.sleep(500);
+ Thread.sleep(30000);
+
+// Ota ota = new Ota();
+// ota.excuteUpdateZip(getApplicationContext(), "");
} catch (InterruptedException e) {
}
@@ -250,6 +279,15 @@
public void onDestroy() {
super.onDestroy();
Log.i(TAG,"onDestroy");
+
+ if (mChatService != null) {
+ mChatService.stop();
+ }
+ if (mBluetooth != null) {
+ mBluetooth.CloseBluetooth();
+ mBluetooth.unRegisterReceiver();
+ }
+
mIsServiceDestroyed.set(true);
Log.d(TAG, "onDestory executed 杩涚▼ " + Process.myPid());
@@ -362,6 +400,125 @@
}
}
+ public void ConnectBluetooth(String name, String pin) {
+ if (mBluetooth != null && mChatService != null) {
+ mBluetooth.SetPin(pin);
+ mTargetBluetooth = name;
+ if (isMac(name)) {
+ mTargetBluetoothAddr = name;
+ handlerConnectBluetooth.removeCallbacks(runnableConnectBluetooth);
+ handlerConnectBluetooth.postDelayed(runnableConnectBluetooth, 500);
+ } else {
+ mDiscoveryBluetooth = true;
+ mBluetooth.doDiscovery(name);
+ }
+ }
+ }
+
+ Handler handlerConnectBluetooth = new Handler();
+ Runnable runnableConnectBluetooth = new Runnable() {
+ @Override
+ public void run() {
+ if (mChatService != null && mTargetBluetoothAddr != null) {
+ mChatService.connect(mTargetBluetoothAddr, true);
+ }
+ }
+ };
+
+ public boolean isMac(String addr) {
+ String pattern = "^([0-9A-Fa-f]{2})(:[0-9A-Fa-f]{2}){5}$";
+ return Pattern.matches(pattern, addr);
+ }
+
+ public void WriteBluetooth(byte []data) {
+ if (mChatService != null && mChatService.getState() == BluetoothChatService.STATE_CONNECTED) {
+ mChatService.write(data);
+ }
+ }
+
+ private final Handler mHandler = new Handler() {
+ @Override
+ public void handleMessage(Message msg) {
+ switch (msg.what) {
+ case Constants.MESSAGE_BLUETOOTH_STATUS:
+ if (msg.arg1 == 1) {
+ Log.d(TAG, "钃濈墮寮�鍚�");
+// mBluetooth.doDiscovery();
+ if (mChatService != null) {
+// mChatService.connect("00:1D:43:9A:E0:79", true);
+// mChatService.connect("00:1A:7D:DA:71:11", true);
+ }
+ BluetoothStatusChange(1);
+ } else {
+ Log.d(TAG, "钃濈墮鍏抽棴");
+ BluetoothStatusChange(0);
+ }
+ break;
+ case Constants.MESSAGE_BLUETOOTH_FOUND:
+ String btaddr = msg.getData().getString(Constants.DEVICE_ADDRESS);
+ Log.d(TAG, "鍙戠幇璁惧 " + btaddr);
+ if (mDiscoveryBluetooth) {
+ mTargetBluetoothAddr = btaddr;
+ }
+ break;
+ case Constants.MESSAGE_BLUETOOTH_DISCOVERY_FINISHED:
+ Log.d(TAG, "鎼滅储缁撴潫");
+ if (mDiscoveryBluetooth) {
+ handlerConnectBluetooth.removeCallbacks(runnableConnectBluetooth);
+ handlerConnectBluetooth.postDelayed(runnableConnectBluetooth, 500);
+ }
+ mDiscoveryBluetooth = false;
+ break;
+ case Constants.MESSAGE_STATE_CHANGE:
+ switch (msg.arg1) {
+ case BluetoothChatService.STATE_CONNECTED:
+ Log.d(TAG, "钃濈墮宸茶繛鎺�");
+ BluetoothStatusChange(3);
+ break;
+ case BluetoothChatService.STATE_CONNECTING:
+ Log.d(TAG, "钃濈墮杩炴帴涓�...");
+ break;
+ case BluetoothChatService.STATE_LISTEN:
+ Log.d(TAG, "钃濈墮鐩戝惉");
+ BluetoothStatusChange(2);
+ break;
+ case BluetoothChatService.STATE_NONE:
+ Log.d(TAG, "钃濈墮鏃犳晥");
+ BluetoothStatusChange(2);
+ handlerConnectBluetooth.removeCallbacks(runnableConnectBluetooth);
+ handlerConnectBluetooth.postDelayed(runnableConnectBluetooth, 5000);
+ break;
+ }
+ break;
+ case Constants.MESSAGE_WRITE:
+ break;
+ case Constants.MESSAGE_READ:
+// Log.d(TAG, String.format("钃濈墮鏁版嵁 length = %d 绾跨▼ %d", msg.arg1, Thread.currentThread().getId()));
+ BluetoothDataComeIn((byte[]) msg.obj, msg.arg1);
+ /*if (ndkUtils != null) {
+ byte[] readBuf = (byte[]) msg.obj;
+ ndkUtils.bluetoothMoreData(readBuf, msg.arg1);
+ }*/
+ break;
+ case Constants.MESSAGE_DEVICE_NAME:
+ // save the connected device's name
+ mConnectedDeviceName = msg.getData().getString(Constants.DEVICE_NAME);
+ Log.d(TAG, "MESSAGE_DEVICE_NAME: " + mConnectedDeviceName);
+ break;
+ case Constants.MESSAGE_TOAST:
+ break;
+ default:break;
+ }
+ }
+ };
+
+ class DataCallback implements BluetoothChatServiceCallback {
+ @Override
+ public void iDataComeIn(byte []data, int length) {
+
+ }
+ }
+
// Used to load the 'native-lib' library on application startup.
static {
System.loadLibrary("native-lib");
@@ -372,4 +529,6 @@
public native void MainProcBinMsgEntry(int cmd, byte []data, int length);
public native void UpgradeMcu(String vercode, byte []rom);
public native void TextSpeakEnd(int id);
+ public native void BluetoothStatusChange(int status);
+ public native void BluetoothDataComeIn(byte []data, int length);
}
--
Gitblit v1.8.0