13 changed files with 377 additions and 215 deletions
-
12app/src/main/java/com/iflytop/profilometer/MainActivity.java
-
56app/src/main/java/com/iflytop/profilometer/ProfilometerApplication.java
-
1app/src/main/java/com/iflytop/profilometer/api/auth/AuthApi.java
-
39app/src/main/java/com/iflytop/profilometer/api/ble/BleApi.java
-
4app/src/main/java/com/iflytop/profilometer/api/ble/BleRoutes.kt
-
60app/src/main/java/com/iflytop/profilometer/api/ble/BleWebsocketManager.java
-
2app/src/main/java/com/iflytop/profilometer/api/record/RecordApi.java
-
2app/src/main/java/com/iflytop/profilometer/api/sync/SyncRoutes.kt
-
2app/src/main/java/com/iflytop/profilometer/api/system/SystemRoutes.kt
-
23app/src/main/java/com/iflytop/profilometer/core/bluetooth/BleManager.java
-
2app/src/main/java/com/iflytop/profilometer/core/websocket/WebSocketManager.kt
-
5app/src/main/java/com/iflytop/profilometer/server/HttpServer.kt
@ -1,15 +1,67 @@ |
|||
package com.iflytop.profilometer; |
|||
|
|||
import android.app.Activity; |
|||
import android.app.Application; |
|||
import android.os.Bundle; |
|||
|
|||
import androidx.annotation.NonNull; |
|||
|
|||
import com.iflytop.profilometer.dao.UserDao; |
|||
|
|||
public class ProfilometerApplication extends Application { |
|||
private Activity currentActivity; |
|||
|
|||
@Override |
|||
public void onCreate() { |
|||
super.onCreate(); |
|||
// |
|||
// UserDao userDao = new UserDao(this); |
|||
// userDao.insertAdminUserIfNotExists(); |
|||
|
|||
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() { |
|||
@Override |
|||
public void onActivityCreated(@NonNull Activity activity, Bundle savedInstanceState) { |
|||
currentActivity = activity; |
|||
} |
|||
|
|||
@Override |
|||
public void onActivityStarted(@NonNull Activity activity) { |
|||
currentActivity = activity; |
|||
} |
|||
|
|||
@Override |
|||
public void onActivityResumed(@NonNull Activity activity) { |
|||
currentActivity = activity; |
|||
} |
|||
|
|||
@Override |
|||
public void onActivityPaused(@NonNull Activity activity) { |
|||
|
|||
} |
|||
|
|||
@Override |
|||
public void onActivityStopped(@NonNull Activity activity) { |
|||
// 如果停止的 Activity 就是当前的 Activity,则清空引用 |
|||
if (currentActivity == activity) { |
|||
currentActivity = null; |
|||
} |
|||
} |
|||
|
|||
@Override |
|||
public void onActivitySaveInstanceState(@NonNull Activity activity, @NonNull Bundle outState) { |
|||
// no-op |
|||
} |
|||
|
|||
@Override |
|||
public void onActivityDestroyed(@NonNull Activity activity) { |
|||
if (currentActivity == activity) { |
|||
currentActivity = null; |
|||
} |
|||
} |
|||
}); |
|||
} |
|||
|
|||
UserDao userDao = new UserDao(this); |
|||
userDao.insertAdminUserIfNotExists(); |
|||
public Activity getCurrentActivity() { |
|||
return currentActivity; |
|||
} |
|||
} |
@ -1,21 +1,50 @@ |
|||
package com.iflytop.profilometer.api.ble; |
|||
|
|||
import android.content.Context; |
|||
import android.os.Build; |
|||
import android.util.Log; |
|||
|
|||
import com.iflytop.profilometer.ProfilometerApplication; |
|||
import com.iflytop.profilometer.common.result.Result; |
|||
import com.iflytop.profilometer.common.utils.GsonUtil; |
|||
import com.iflytop.profilometer.core.websocket.WebSocketManager; |
|||
import com.iflytop.profilometer.dao.UserDao; |
|||
import com.iflytop.profilometer.model.entiy.AppUser; |
|||
import com.iflytop.profilometer.core.bluetooth.BleManager; |
|||
|
|||
/** |
|||
* 蓝牙接口 |
|||
*/ |
|||
public class BleApi { |
|||
private static final String TAG = "BleApi"; |
|||
private final Context context; |
|||
|
|||
public BleApi(Context context) { |
|||
this.context = context; |
|||
this.context = context.getApplicationContext(); |
|||
} |
|||
|
|||
/** |
|||
* 开始获取蓝牙设备列表 |
|||
*/ |
|||
public String start() { |
|||
try { |
|||
BleManager.getInstance(context).startScan(); |
|||
BleWebsocketManager.getInstance(context).startWsPush(); |
|||
return Result.success(); |
|||
} catch (Exception e) { |
|||
Log.e(TAG, "开始获取蓝牙列表失败", e); |
|||
return Result.failed("获取蓝牙列表失败"); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 结束获取蓝牙设备列表 |
|||
*/ |
|||
public String stop() { |
|||
try { |
|||
BleManager.getInstance(context).stopScan(); |
|||
BleWebsocketManager.getInstance(context).stopWsPush(); |
|||
return Result.success(); |
|||
} catch (Exception e) { |
|||
Log.e(TAG, "结束获取蓝牙设备列表失败", e); |
|||
return Result.failed(); |
|||
} |
|||
} |
|||
|
|||
|
|||
|
@ -0,0 +1,60 @@ |
|||
package com.iflytop.profilometer.api.ble; |
|||
|
|||
import android.annotation.SuppressLint; |
|||
import android.bluetooth.BluetoothDevice; |
|||
import android.content.Context; |
|||
|
|||
import com.iflytop.profilometer.common.utils.GsonUtil; |
|||
import com.iflytop.profilometer.core.bluetooth.BleManager; |
|||
import com.iflytop.profilometer.core.websocket.WebSocketManager; |
|||
|
|||
import java.util.ArrayList; |
|||
import java.util.List; |
|||
import java.util.concurrent.Executors; |
|||
import java.util.concurrent.ScheduledExecutorService; |
|||
import java.util.concurrent.ScheduledFuture; |
|||
import java.util.concurrent.TimeUnit; |
|||
|
|||
public class BleWebsocketManager { |
|||
private static BleWebsocketManager instance; |
|||
private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); |
|||
private ScheduledFuture<?> scheduledTask; |
|||
private final Context context; |
|||
|
|||
private BleWebsocketManager(Context context) { |
|||
this.context = context.getApplicationContext(); |
|||
} |
|||
|
|||
public static synchronized BleWebsocketManager getInstance(Context context) { |
|||
if (instance == null) { |
|||
instance = new BleWebsocketManager(context); |
|||
} |
|||
return instance; |
|||
} |
|||
|
|||
/** |
|||
* 开始定时任务 |
|||
*/ |
|||
@SuppressLint("MissingPermission") |
|||
public void startWsPush() { |
|||
stopWsPush(); |
|||
scheduledTask = scheduler.scheduleWithFixedDelay(() -> { |
|||
List<BluetoothDevice> scannedDevices = BleManager.getInstance(context).getScannedDevices(); |
|||
List<String> bleList = new ArrayList<>(); |
|||
for(BluetoothDevice bluetoothDevice : scannedDevices){ |
|||
bleList.add(bluetoothDevice.getName() + "_" + bluetoothDevice.getAddress()); |
|||
} |
|||
WebSocketManager.send(GsonUtil.toJson(bleList)); |
|||
}, 2, 2, TimeUnit.SECONDS); |
|||
} |
|||
|
|||
/** |
|||
* 结束定时任务 |
|||
*/ |
|||
public void stopWsPush() { |
|||
if (scheduledTask != null && !scheduledTask.isCancelled()) { |
|||
scheduledTask.cancel(false); |
|||
} |
|||
} |
|||
|
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue