diff --git a/flutter/android/app/src/main/AndroidManifest.xml b/flutter/android/app/src/main/AndroidManifest.xml
index 1b99801bf..4e5c2eae2 100644
--- a/flutter/android/app/src/main/AndroidManifest.xml
+++ b/flutter/android/app/src/main/AndroidManifest.xml
@@ -3,6 +3,7 @@
package="com.carriez.flutter_hbb">
+
diff --git a/flutter/lib/consts.dart b/flutter/lib/consts.dart
index 14182649e..1b0e72f05 100644
--- a/flutter/lib/consts.dart
+++ b/flutter/lib/consts.dart
@@ -20,8 +20,10 @@ const String kPlatformAdditionsIsWayland = "is_wayland";
const String kPlatformAdditionsHeadless = "headless";
const String kPlatformAdditionsIsInstalled = "is_installed";
const String kPlatformAdditionsIddImpl = "idd_impl";
-const String kPlatformAdditionsRustDeskVirtualDisplays = "rustdesk_virtual_displays";
-const String kPlatformAdditionsAmyuniVirtualDisplays = "amyuni_virtual_displays";
+const String kPlatformAdditionsRustDeskVirtualDisplays =
+ "rustdesk_virtual_displays";
+const String kPlatformAdditionsAmyuniVirtualDisplays =
+ "amyuni_virtual_displays";
const String kPlatformAdditionsHasFileClipboard = "has_file_clipboard";
const String kPlatformAdditionsSupportedPrivacyModeImpl =
"supported_privacy_mode_impl";
@@ -224,6 +226,7 @@ const kManageExternalStorage = "android.permission.MANAGE_EXTERNAL_STORAGE";
const kRequestIgnoreBatteryOptimizations =
"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS";
const kSystemAlertWindow = "android.permission.SYSTEM_ALERT_WINDOW";
+const kAndroid13Notification = "android.permission.POST_NOTIFICATIONS";
/// Android channel invoke type key
class AndroidChannel {
diff --git a/flutter/lib/models/server_model.dart b/flutter/lib/models/server_model.dart
index d62230c72..82cc8367a 100644
--- a/flutter/lib/models/server_model.dart
+++ b/flutter/lib/models/server_model.dart
@@ -322,6 +322,20 @@ class ServerModel with ChangeNotifier {
}
}
+ Future checkRequestNotificationPermission() async {
+ debugPrint("androidVersion $androidVersion");
+ if (androidVersion < 33) {
+ return true;
+ }
+ if (await AndroidPermissionManager.check(kAndroid13Notification)) {
+ debugPrint("notification permission already granted");
+ return true;
+ }
+ var res = await AndroidPermissionManager.request(kAndroid13Notification);
+ debugPrint("notification permission request result: $res");
+ return res;
+ }
+
/// Toggle the screen sharing service.
toggleService() async {
if (_isStart) {
@@ -348,6 +362,7 @@ class ServerModel with ChangeNotifier {
stopService();
}
} else {
+ await checkRequestNotificationPermission();
final res = await parent.target?.dialogManager
.show((setState, close, context) {
submit() => close(true);