diff --git a/lib/core/translations/language/en_us.dart b/lib/core/translations/language/en_us.dart index 3868f975a..bfac53331 100644 --- a/lib/core/translations/language/en_us.dart +++ b/lib/core/translations/language/en_us.dart @@ -1205,6 +1205,8 @@ const Map enUS = { "selectTargetLanguage": "Select Target Language", "me": "Me", //我 "counterPart": "Counterpart", //对方 + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", //请确保蓝牙耳机已连接到手机并处于通话状态 // 通用对话按钮与选项(用于统一语言选择弹窗等) // 翻译键代表的中文文本内容:取消/确认/自动检测 diff --git a/lib/core/translations/language/zh_cn.dart b/lib/core/translations/language/zh_cn.dart index 64db2449d..fd1602857 100644 --- a/lib/core/translations/language/zh_cn.dart +++ b/lib/core/translations/language/zh_cn.dart @@ -1107,6 +1107,7 @@ const Map zhCN = { "selectTargetLanguage": "选择目标语言", "me": "我", "counterPart": "对方", + "bluetoothCallStateError": "请确保蓝牙耳机已连接到手机并处于通话状态", // 通用对话按钮与选项(用于统一语言选择弹窗等) // 以下翻译键的中文文本内容如注释所示 diff --git a/lib/data/services/novice_guide_service.dart b/lib/data/services/novice_guide_service.dart index 7fbcefecf..10e9195a2 100644 --- a/lib/data/services/novice_guide_service.dart +++ b/lib/data/services/novice_guide_service.dart @@ -109,13 +109,6 @@ class NoviceGuideService extends GetxService { 'endKey': 'guideSmsEnd', 'method': () async { if (Platform.isAndroid) { - // 发送短信需要短信权限 - await PermissionUtil.instance.requestPermission( - permissionType: Permission.sms, - permissionName: 'sms'.tr, // 短信 - explanationText: 'smsPermissionDesc'.tr, // 用于发送短信功能 - permanentDenialText: 'smsPermissionDetailDesc'.tr, // 发送短信功能需要短信权限 - ); //发送短信还需要联系人权限 await PermissionUtil.instance.requestPermission( permissionType: Permission.contacts, diff --git a/lib/modules/permissions/controllers/permissions_controller.dart b/lib/modules/permissions/controllers/permissions_controller.dart index fb69e9b1d..1b184a4e4 100644 --- a/lib/modules/permissions/controllers/permissions_controller.dart +++ b/lib/modules/permissions/controllers/permissions_controller.dart @@ -145,7 +145,6 @@ class PermissionsController extends GetxController { Permission.calendarFullAccess, Permission.location, Permission.phone, - Permission.sms, Permission.contacts, ...bluetoothPermissions, Permission.notification, diff --git a/lib/modules/permissions/models/permission_group.dart b/lib/modules/permissions/models/permission_group.dart index 30fddf8a5..7b7990dbe 100644 --- a/lib/modules/permissions/models/permission_group.dart +++ b/lib/modules/permissions/models/permission_group.dart @@ -49,7 +49,7 @@ class PermissionGroup { const PermissionGroupModel( titleKey: 'communicationPermissions', icon: Icons.phone_android, - permissions: [Permission.phone, Permission.sms, Permission.contacts], + permissions: [Permission.phone, Permission.contacts], ), // 蓝牙权限组 - 根据平台动态获取权限 PermissionGroupModel( diff --git a/lib/modules/translation/controllers/translation_controller.dart b/lib/modules/translation/controllers/translation_controller.dart index b7a06dc14..8ceb5a382 100644 --- a/lib/modules/translation/controllers/translation_controller.dart +++ b/lib/modules/translation/controllers/translation_controller.dart @@ -953,7 +953,7 @@ class TranslationController extends GetxController with WidgetsBindingObserver { } isPreparing.value = false; if (!bleManager.isCodecActive) { - Get.snackbar('tip'.tr, 'operationFailedPleaseRetry'.tr); + Get.snackbar('tip'.tr, 'bluetoothCallStateError'.tr); throw Exception('lxm--BLE编解码打开失败'); } _audioSourceType = true; diff --git a/local_plugins/chat_api/android/src/main/kotlin/com/yunqiinnovation/chat_api/SystemFunctionHandler.kt b/local_plugins/chat_api/android/src/main/kotlin/com/yunqiinnovation/chat_api/SystemFunctionHandler.kt index 94173554d..bb16bc993 100644 --- a/local_plugins/chat_api/android/src/main/kotlin/com/yunqiinnovation/chat_api/SystemFunctionHandler.kt +++ b/local_plugins/chat_api/android/src/main/kotlin/com/yunqiinnovation/chat_api/SystemFunctionHandler.kt @@ -10,12 +10,10 @@ import android.content.pm.PackageManager import android.location.LocationManager import android.media.AudioManager import android.net.Uri -import android.os.Build import android.provider.AlarmClock import android.provider.CalendarContract import android.provider.ContactsContract import android.provider.Settings -import android.telephony.SmsManager import android.util.Log import androidx.core.content.ContextCompat import com.yunqiinnovation.location_service.LocationService @@ -519,16 +517,6 @@ private class SendTextMessageHandler(private val context: Context?) : FunctionHa val handler = context.let { SystemFunctionHandler(it) } return try { - // 检查发送短信权限 - if (!handler.checkPermissionAndGuide(Manifest.permission.SEND_SMS, "发送短信", "发送短信")) { - return JSONObject().apply { - put("error", JSONObject().apply { - put("code", "permission_denied") - put("message", "需要短信权限才能发送短信,请在权限管理中开启短信权限") - }) - }.toString() - } - val phoneNumber = handler.getPhoneNumberForContact(phone_number) if (phoneNumber.isEmpty()) { return JSONObject().apply { @@ -539,24 +527,24 @@ private class SendTextMessageHandler(private val context: Context?) : FunctionHa }.toString() } - // 使用SmsManager发送短信 - val smsManager = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { - context.getSystemService(SmsManager::class.java) - } else { - @Suppress("DEPRECATION") - SmsManager.getDefault() + val intent = Intent(Intent.ACTION_SENDTO).apply { + data = Uri.parse("smsto:$phoneNumber") + putExtra("sms_body", message) + flags = Intent.FLAG_ACTIVITY_NEW_TASK } - - // 处理长短信 - val parts = smsManager.divideMessage(message) - if (parts.size == 1) { - smsManager.sendTextMessage(phoneNumber, null, message, null, null) + if (context.packageManager?.queryIntentActivities(intent, 0)?.isNotEmpty() == true) { + context.startActivity(intent) } else { - smsManager.sendMultipartTextMessage(phoneNumber, null, parts, null, null) + return JSONObject().apply { + put("error", JSONObject().apply { + put("code", "no_sms_app") + put("message", "未找到可用的短信应用") + }) + }.toString() } JSONObject().apply { - put("result", "已成功向${phone_number}发送短信") + put("result", "已打开短信应用,请确认发送") put("phone", phoneNumber) put("message", message) }.toString() diff --git a/local_plugins/open_ai_service/android/AndroidManifest.xml b/local_plugins/open_ai_service/android/AndroidManifest.xml index 1d834e578..2b2696537 100644 --- a/local_plugins/open_ai_service/android/AndroidManifest.xml +++ b/local_plugins/open_ai_service/android/AndroidManifest.xml @@ -4,9 +4,7 @@ - - - \ No newline at end of file + diff --git a/local_plugins/open_ai_service/android/src/main/kotlin/com/yunqiinnovation/open_ai_service/SystemFunctionHandler.kt b/local_plugins/open_ai_service/android/src/main/kotlin/com/yunqiinnovation/open_ai_service/SystemFunctionHandler.kt index 3117bffa6..845b60d23 100644 --- a/local_plugins/open_ai_service/android/src/main/kotlin/com/yunqiinnovation/open_ai_service/SystemFunctionHandler.kt +++ b/local_plugins/open_ai_service/android/src/main/kotlin/com/yunqiinnovation/open_ai_service/SystemFunctionHandler.kt @@ -13,7 +13,6 @@ import android.provider.AlarmClock import android.provider.CalendarContract import android.provider.MediaStore import android.provider.Settings -import android.telephony.SmsManager import android.util.Log import org.json.JSONObject import kotlinx.coroutines.suspendCancellableCoroutine @@ -761,29 +760,31 @@ class SystemFunctionHandler(private val context: Context) { Log.d(TAG, "发送短信给 $contact: $message") try { - // 检查发送短信权限 - if (!checkPermissionAndGuide(Manifest.permission.SEND_SMS, "发送短信", "发送短信")) { + val phoneNumber = getPhoneNumberForContact(contact) + if (phoneNumber.isEmpty()) { return Result( success = false, - message = "需要短信权限才能发送短信,请在权限管理中开启短信权限" + message = "未找到联系人信息: $contact" ) } - val phoneNumber = getPhoneNumberForContact(contact) - if (phoneNumber.isEmpty()) { + val intent = Intent(Intent.ACTION_SENDTO).apply { + data = Uri.parse("smsto:$phoneNumber") + putExtra("sms_body", message) + flags = Intent.FLAG_ACTIVITY_NEW_TASK + } + if (intent.resolveActivity(context.packageManager) != null) { + context.startActivity(intent) + } else { return Result( success = false, - message = "未找到联系人信息: $contact" + message = "未找到可用的短信应用" ) } - // 使用SmsManager发送短信 - val smsManager = SmsManager.getDefault() - smsManager.sendTextMessage(phoneNumber, null, message, null, null) - return Result( success = true, - message = "已向${contact}发送短信: $message" + message = "已打开短信应用,请确认发送" ) } catch (e: Exception) { Log.e(TAG, "发送短信失败: ${e.message}", e) @@ -1350,4 +1351,4 @@ class SystemFunctionHandler(private val context: Context) { val success: Boolean, val message: String ) -} \ No newline at end of file +}