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; |
package com.iflytop.profilometer; |
||||
|
|
||||
|
import android.app.Activity; |
||||
import android.app.Application; |
import android.app.Application; |
||||
|
import android.os.Bundle; |
||||
|
|
||||
|
import androidx.annotation.NonNull; |
||||
|
|
||||
import com.iflytop.profilometer.dao.UserDao; |
import com.iflytop.profilometer.dao.UserDao; |
||||
|
|
||||
public class ProfilometerApplication extends Application { |
public class ProfilometerApplication extends Application { |
||||
|
private Activity currentActivity; |
||||
|
|
||||
@Override |
@Override |
||||
public void onCreate() { |
public void onCreate() { |
||||
super.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; |
package com.iflytop.profilometer.api.ble; |
||||
|
|
||||
import android.content.Context; |
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.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 { |
public class BleApi { |
||||
|
private static final String TAG = "BleApi"; |
||||
private final Context context; |
private final Context context; |
||||
|
|
||||
public BleApi(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