diff --git a/circle_app/android/app/build.gradle b/circle_app/android/app/build.gradle index eed052d..d716e75 100644 --- a/circle_app/android/app/build.gradle +++ b/circle_app/android/app/build.gradle @@ -65,8 +65,8 @@ android { // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. minSdkVersion 21 targetSdkVersion flutter.targetSdkVersion - versionCode 11 - versionName "1.1.0" + versionCode 13 + versionName "1.1.2" manifestPlaceholders = [ vivo_APPID: "105669716", vivo_APPKEY:"84f750207787376b310ca5b0d5969122", diff --git a/circle_app/android/app/src/main/AndroidManifest.xml b/circle_app/android/app/src/main/AndroidManifest.xml index f7243ff..838bce2 100644 --- a/circle_app/android/app/src/main/AndroidManifest.xml +++ b/circle_app/android/app/src/main/AndroidManifest.xml @@ -24,6 +24,9 @@ android:name="android.permission.READ_MEDIA_IMAGES"/> + + + diff --git a/circle_app/lib/app/chat/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field_layout/narrow.dart b/circle_app/lib/app/chat/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field_layout/narrow.dart index 7dc7e82..428c477 100644 --- a/circle_app/lib/app/chat/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field_layout/narrow.dart +++ b/circle_app/lib/app/chat/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field_layout/narrow.dart @@ -157,6 +157,7 @@ class TIMTextFieldLayoutNarrow extends StatefulWidget { class _TIMTextFieldLayoutNarrowState extends TIMUIKitState { + final TUISettingModel settingModel = serviceLocator(); final ImagePicker _picker = ImagePicker(); @@ -838,12 +839,14 @@ class _TIMTextFieldLayoutNarrowState return; } + await requestStoragePermission(); + XFile? pickedFile; String? thumbnailPath; // 声明 thumbnailPath 变量 try { pickedFile = await _picker.pickVideo( - source: imageSource, + source: imageSource, maxDuration: const Duration(seconds: 30) ); if (pickedFile == null) { return; @@ -938,20 +941,39 @@ class _TIMTextFieldLayoutNarrowState if (!isOK) { return; } - + await requestStoragePermission(); try { final XFile? pickedFile = await _picker.pickImage( source: ImageSource.camera, ); + if(null==pickedFile){ + return; + } widget.model.sendImageMessage( - imagePath: pickedFile!.path, + imagePath: pickedFile.path, convID: widget.conversationID, convType: widget.conversationType, inputElement: context); - var data = await DioManager.instance.get(url: Api.getAddTrialCount + "1"); + DioManager.instance.get(url: Api.getAddTrialCount + "1"); } catch (e) {} } + //实在找不到问题 先加个权限试试 + Future requestStoragePermission() async { + final status = await Permission.storage.request(); + if (status.isGranted) { + // 权限已授予,可以执行存储操作 + } else if (status.isDenied) { + showOKToast("请打开存储权限。将为你带来更好的服务"); + // 权限被拒绝,您可以显示一条消息来解释为什么需要权限 + } else if (status.isPermanentlyDenied) { + showOKToast("请打开存储权限。将为你带来更优的服务"); + // 权限被永久拒绝,用户无法在应用程序内授予权限 + // 您可以引导用户进入应用程序设置以手动启用权限 + } + } + + _handleCameraAndMic() async { // // 请求权限 // Map permissions = await PermissionHandler().requestPermissions( diff --git a/circle_app/lib/app/dialog/YesAgreementDialog.dart b/circle_app/lib/app/dialog/YesAgreementDialog.dart index 0e5dcc7..76fabf4 100644 --- a/circle_app/lib/app/dialog/YesAgreementDialog.dart +++ b/circle_app/lib/app/dialog/YesAgreementDialog.dart @@ -2,6 +2,7 @@ import 'dart:ffi'; import 'dart:io'; import 'package:connectivity/connectivity.dart'; +import 'package:device_info/device_info.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; @@ -198,21 +199,34 @@ class _CustomDialogState extends State { if (Platform.isAndroid) { initWxApi(); } - final CoreServicesImpl coreInstance = TIMUIKitCore.getInstance(); - await ChannelPush.init((msg) {}); - - int? businessID = await TimUiKitPushPlugin.getBuzId(PushConfig.appInfo); - - String token = await ChannelPush.getDeviceToken(); - ChannelPush.uploadToken(); - - print("token=" + token); - if (token != "") { - V2TimCallback res = await coreInstance.setOfflinePushConfig( - token: token, businessID: businessID); - - print("token=" + res.code.toString()); + AndroidDeviceInfo androidInfo; + try { + DeviceInfoPlugin deviceInfo = DeviceInfoPlugin(); + androidInfo = await deviceInfo.androidInfo; + } catch (e) { + // 处理异常 + return true; } + if (androidInfo.brand == 'Xiaomi'||androidInfo.brand == 'Redmi') { + + }else{ + final CoreServicesImpl coreInstance = TIMUIKitCore.getInstance(); + await ChannelPush.init((msg) {}); + + int? businessID = await TimUiKitPushPlugin.getBuzId(PushConfig.appInfo); + + String token = await ChannelPush.getDeviceToken(); + ChannelPush.uploadToken(); + + print("token=" + token); + if (token != "") { + V2TimCallback res = await coreInstance.setOfflinePushConfig( + token: token, businessID: businessID); + + print("token=" + res.code.toString()); + } + } + return true; } diff --git a/circle_app/lib/main.dart b/circle_app/lib/main.dart index 4232715..acef58f 100644 --- a/circle_app/lib/main.dart +++ b/circle_app/lib/main.dart @@ -13,10 +13,12 @@ import 'package:circle_app/util/SharedPreferencesHelper.dart'; import 'package:circle_app/util/device.dart'; import 'package:circle_app/util/util.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:flutter_native_splash/flutter_native_splash.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; +import 'package:image_picker/image_picker.dart'; import 'package:oktoast/oktoast.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/separate_models/tui_chat_separate_view_model.dart'; import 'package:tencent_cloud_chat_uikit/data_services/core/core_services.dart'; @@ -36,8 +38,29 @@ void main() { WidgetsBinding widgetsBinding = WidgetsFlutterBinding.ensureInitialized(); FlutterNativeSplash.preserve(widgetsBinding: widgetsBinding); runApp(const MyApp()); + getLostData(); } +Future getLostData() async { + final ImagePicker picker = ImagePicker(); + final LostDataResponse response = await picker.retrieveLostData(); + if (response.isEmpty) { + return; + } + final List? files = response.files; + if (files != null) { + _handleLostFiles(files); + } else { + _handleError(response.exception); + } +} +void _handleLostFiles(List file) {} +Future _handleError(dynamic error) async { + // 处理错误,例如记录错误或显示错误消息 + print('Error occurred: $error'); + // 在界面上显示错误消息 + showToast('内存异常,请重新上传'); +} int IM_SDK_APP_ID = 1400799631; String IOS_APP_ID = "";