bjb 1 месяц назад
Родитель
Сommit
fd4ff36143

+ 2 - 2
.idea/deploymentTargetSelector.xml

@@ -4,10 +4,10 @@
     <selectionStates>
       <SelectionState runConfigName="app">
         <option name="selectionMode" value="DROPDOWN" />
-        <DropdownSelection timestamp="2026-02-05T06:40:21.375355300Z">
+        <DropdownSelection timestamp="2026-03-26T10:01:53.416507100Z">
           <Target type="DEFAULT_BOOT">
             <handle>
-              <DeviceId pluginId="PhysicalDevice" identifier="serial=14381b6d" />
+              <DeviceId pluginId="LocalEmulator" identifier="path=C:\Users\GrayCarbon\.android\avd\Medium_Phone.avd" />
             </handle>
           </Target>
         </DropdownSelection>

+ 10 - 1
app/src/main/java/com/iscs/bozzys/ui/pages/detail/task/PageDetailTask.kt

@@ -1,5 +1,6 @@
 package com.iscs.bozzys.ui.pages.detail.task
 
+import android.Manifest
 import android.app.Application
 import android.content.Context
 import android.content.Intent
@@ -40,6 +41,7 @@ import androidx.compose.ui.res.painterResource
 import androidx.compose.ui.text.font.FontWeight
 import androidx.compose.ui.unit.dp
 import androidx.compose.ui.unit.sp
+import androidx.core.app.ActivityCompat
 import androidx.lifecycle.lifecycleScope
 import androidx.lifecycle.viewmodel.compose.viewModel
 import com.iscs.bozzys.R
@@ -189,6 +191,13 @@ class PageDetailTask : PageBase() {
     @Composable
     override fun GetViews(pv: PaddingValues) {
         if (!getPageData()) return
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+            ActivityCompat.requestPermissions(
+                this,
+                arrayOf(Manifest.permission.BLUETOOTH_CONNECT, Manifest.permission.BLUETOOTH_SCAN),
+                1
+            )
+        }
         val vm: VMDetailTask = viewModel()
         LaunchedEffect(Unit) {
             vm.toast.initToast()
@@ -225,7 +234,7 @@ class PageDetailTask : PageBase() {
                         )
                     }
                 }, Modifier
-                    .padding(bottom = 16.dp)
+                    .padding(bottom = (pv.calculateBottomPadding().value + 16).dp)
                     .fillMaxWidth(0.8f)
                     .height(40.dp)
                     .align(Alignment.CenterHorizontally)

+ 3 - 1
app/src/main/java/com/iscs/bozzys/utils/ble/BleManager.kt

@@ -9,6 +9,7 @@ import android.bluetooth.BluetoothGattCharacteristic
 import android.bluetooth.BluetoothGattDescriptor
 import android.bluetooth.BluetoothManager
 import android.bluetooth.BluetoothProfile
+import android.bluetooth.BluetoothStatusCodes
 import android.bluetooth.le.ScanCallback
 import android.bluetooth.le.ScanFilter
 import android.bluetooth.le.ScanResult
@@ -137,6 +138,7 @@ class BleManager(
 
         override fun onCharacteristicWrite(gatt: BluetoothGatt, characteristic: BluetoothGattCharacteristic, status: Int) {
             super.onCharacteristicWrite(gatt, characteristic, status)
+            if (characteristic.value == null) return
             LogUtil.w(TAG, "gattCallback ---> ${characteristic.value.byteArrayToHexString(" ")}")
         }
 
@@ -275,7 +277,7 @@ class BleManager(
 
             // 写入desc
             val enable = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
-                gatt?.writeDescriptor(descriptor, BluetoothGattDescriptor.ENABLE_INDICATION_VALUE)
+                gatt?.writeDescriptor(descriptor, BluetoothGattDescriptor.ENABLE_INDICATION_VALUE) == BluetoothStatusCodes.SUCCESS
             } else {
                 descriptor.value = BluetoothGattDescriptor.ENABLE_INDICATION_VALUE
                 gatt?.writeDescriptor(descriptor)