Browse Source

Merge branch 'new_dev' of https://github.com/deepcloud2048/deep_voice into new_dev

weicu
tanlongsheng 10 months ago
parent
commit
55f27728b3
  1. 2
      lib/core/translations/language/en_us.dart
  2. 1
      lib/core/translations/language/zh_cn.dart
  3. 7
      lib/data/services/novice_guide_service.dart
  4. 1
      lib/modules/permissions/controllers/permissions_controller.dart
  5. 2
      lib/modules/permissions/models/permission_group.dart
  6. 2
      lib/modules/translation/controllers/translation_controller.dart
  7. 38
      local_plugins/chat_api/android/src/main/kotlin/com/yunqiinnovation/chat_api/SystemFunctionHandler.kt
  8. 4
      local_plugins/open_ai_service/android/AndroidManifest.xml
  9. 27
      local_plugins/open_ai_service/android/src/main/kotlin/com/yunqiinnovation/open_ai_service/SystemFunctionHandler.kt

2
lib/core/translations/language/en_us.dart

@ -1205,6 +1205,8 @@ const Map<String, String> enUS = {
"selectTargetLanguage": "Select Target Language", "selectTargetLanguage": "Select Target Language",
"me": "Me", //我 "me": "Me", //我
"counterPart": "Counterpart", //对方 "counterPart": "Counterpart", //对方
"bluetoothCallStateError":
"Please make sure the Bluetooth headset is connected to the phone and in a call state", //请确保蓝牙耳机已连接到手机并处于通话状态
// 通用对话按钮与选项(用于统一语言选择弹窗等) // 通用对话按钮与选项(用于统一语言选择弹窗等)
// 翻译键代表的中文文本内容:取消/确认/自动检测 // 翻译键代表的中文文本内容:取消/确认/自动检测

1
lib/core/translations/language/zh_cn.dart

@ -1107,6 +1107,7 @@ const Map<String, String> zhCN = {
"selectTargetLanguage": "选择目标语言", "selectTargetLanguage": "选择目标语言",
"me": "我", "me": "我",
"counterPart": "对方", "counterPart": "对方",
"bluetoothCallStateError": "请确保蓝牙耳机已连接到手机并处于通话状态",
// 通用对话按钮与选项(用于统一语言选择弹窗等) // 通用对话按钮与选项(用于统一语言选择弹窗等)
// 以下翻译键的中文文本内容如注释所示 // 以下翻译键的中文文本内容如注释所示

7
lib/data/services/novice_guide_service.dart

@ -109,13 +109,6 @@ class NoviceGuideService extends GetxService {
'endKey': 'guideSmsEnd', 'endKey': 'guideSmsEnd',
'method': () async { 'method': () async {
if (Platform.isAndroid) { if (Platform.isAndroid) {
// 发送短信需要短信权限
await PermissionUtil.instance.requestPermission(
permissionType: Permission.sms,
permissionName: 'sms'.tr, // 短信
explanationText: 'smsPermissionDesc'.tr, // 用于发送短信功能
permanentDenialText: 'smsPermissionDetailDesc'.tr, // 发送短信功能需要短信权限
);
//发送短信还需要联系人权限 //发送短信还需要联系人权限
await PermissionUtil.instance.requestPermission( await PermissionUtil.instance.requestPermission(
permissionType: Permission.contacts, permissionType: Permission.contacts,

1
lib/modules/permissions/controllers/permissions_controller.dart

@ -145,7 +145,6 @@ class PermissionsController extends GetxController {
Permission.calendarFullAccess, Permission.calendarFullAccess,
Permission.location, Permission.location,
Permission.phone, Permission.phone,
Permission.sms,
Permission.contacts, Permission.contacts,
...bluetoothPermissions, ...bluetoothPermissions,
Permission.notification, Permission.notification,

2
lib/modules/permissions/models/permission_group.dart

@ -49,7 +49,7 @@ class PermissionGroup {
const PermissionGroupModel( const PermissionGroupModel(
titleKey: 'communicationPermissions', titleKey: 'communicationPermissions',
icon: Icons.phone_android, icon: Icons.phone_android,
permissions: [Permission.phone, Permission.sms, Permission.contacts], permissions: [Permission.phone, Permission.contacts],
), ),
// 蓝牙权限组 - 根据平台动态获取权限 // 蓝牙权限组 - 根据平台动态获取权限
PermissionGroupModel( PermissionGroupModel(

2
lib/modules/translation/controllers/translation_controller.dart

@ -953,7 +953,7 @@ class TranslationController extends GetxController with WidgetsBindingObserver {
} }
isPreparing.value = false; isPreparing.value = false;
if (!bleManager.isCodecActive) { if (!bleManager.isCodecActive) {
Get.snackbar('tip'.tr, 'operationFailedPleaseRetry'.tr); Get.snackbar('tip'.tr, 'bluetoothCallStateError'.tr);
throw Exception('lxm--BLE编解码打开失败'); throw Exception('lxm--BLE编解码打开失败');
} }
_audioSourceType = true; _audioSourceType = true;

38
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.location.LocationManager
import android.media.AudioManager import android.media.AudioManager
import android.net.Uri import android.net.Uri
import android.os.Build
import android.provider.AlarmClock import android.provider.AlarmClock
import android.provider.CalendarContract import android.provider.CalendarContract
import android.provider.ContactsContract import android.provider.ContactsContract
import android.provider.Settings import android.provider.Settings
import android.telephony.SmsManager
import android.util.Log import android.util.Log
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import com.yunqiinnovation.location_service.LocationService import com.yunqiinnovation.location_service.LocationService
@ -519,16 +517,6 @@ private class SendTextMessageHandler(private val context: Context?) : FunctionHa
val handler = context.let { SystemFunctionHandler(it) } val handler = context.let { SystemFunctionHandler(it) }
return try { 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) val phoneNumber = handler.getPhoneNumberForContact(phone_number)
if (phoneNumber.isEmpty()) { if (phoneNumber.isEmpty()) {
return JSONObject().apply { return JSONObject().apply {
@ -539,24 +527,24 @@ private class SendTextMessageHandler(private val context: Context?) : FunctionHa
}.toString() }.toString()
} }
// 使用SmsManager发送短信 val intent = Intent(Intent.ACTION_SENDTO).apply {
val smsManager = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { data = Uri.parse("smsto:$phoneNumber")
context.getSystemService(SmsManager::class.java) putExtra("sms_body", message)
} else { flags = Intent.FLAG_ACTIVITY_NEW_TASK
@Suppress("DEPRECATION")
SmsManager.getDefault()
} }
if (context.packageManager?.queryIntentActivities(intent, 0)?.isNotEmpty() == true) {
// 处理长短信 context.startActivity(intent)
val parts = smsManager.divideMessage(message)
if (parts.size == 1) {
smsManager.sendTextMessage(phoneNumber, null, message, null, null)
} else { } 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 { JSONObject().apply {
put("result", "已成功向${phone_number}发送短信") put("result", "已打开短信应用,请确认发送")
put("phone", phoneNumber) put("phone", phoneNumber)
put("message", message) put("message", message)
}.toString() }.toString()

4
local_plugins/open_ai_service/android/AndroidManifest.xml

@ -4,9 +4,7 @@
<!-- 拨打电话权限 --> <!-- 拨打电话权限 -->
<uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.CALL_PHONE" />
<!-- 发送短信权限 -->
<uses-permission android:name="android.permission.SEND_SMS" />
<!-- 读取联系人权限 --> <!-- 读取联系人权限 -->
<uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.READ_CONTACTS" />
</manifest> </manifest>

27
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.CalendarContract
import android.provider.MediaStore import android.provider.MediaStore
import android.provider.Settings import android.provider.Settings
import android.telephony.SmsManager
import android.util.Log import android.util.Log
import org.json.JSONObject import org.json.JSONObject
import kotlinx.coroutines.suspendCancellableCoroutine import kotlinx.coroutines.suspendCancellableCoroutine
@ -761,29 +760,31 @@ class SystemFunctionHandler(private val context: Context) {
Log.d(TAG, "发送短信给 $contact: $message") Log.d(TAG, "发送短信给 $contact: $message")
try { try {
// 检查发送短信权限 val phoneNumber = getPhoneNumberForContact(contact)
if (!checkPermissionAndGuide(Manifest.permission.SEND_SMS, "发送短信", "发送短信")) { if (phoneNumber.isEmpty()) {
return Result( return Result(
success = false, success = false,
message = "需要短信权限才能发送短信,请在权限管理中开启短信权限" message = "未找到联系人信息: $contact"
) )
} }
val phoneNumber = getPhoneNumberForContact(contact) val intent = Intent(Intent.ACTION_SENDTO).apply {
if (phoneNumber.isEmpty()) { 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( return Result(
success = false, success = false,
message = "未找到联系人信息: $contact" message = "未找到可用的短信应用"
) )
} }
// 使用SmsManager发送短信
val smsManager = SmsManager.getDefault()
smsManager.sendTextMessage(phoneNumber, null, message, null, null)
return Result( return Result(
success = true, success = true,
message = "已向${contact}发送短信: $message" message = "已打开短信应用,请确认发送"
) )
} catch (e: Exception) { } catch (e: Exception) {
Log.e(TAG, "发送短信失败: ${e.message}", e) Log.e(TAG, "发送短信失败: ${e.message}", e)
@ -1350,4 +1351,4 @@ class SystemFunctionHandler(private val context: Context) {
val success: Boolean, val success: Boolean,
val message: String val message: String
) )
} }

Loading…
Cancel
Save