requestAlarmPermission method
Request alarm permission
Implementation
@override
Future<String> requestAlarmPermission() async {
// Handle alarm permission differently based on platform
if (Platform.isIOS) {
// On iOS, we use notifications for alarms
debugPrint(
'Using notification permission for alarm functionality on iOS',
);
final result = await _invokePermissionMethod(
'requestNotificationPermission',
);
return result;
} else if (Platform.isAndroid) {
try {
final androidVersion = await methodChannel.invokeMethod<int>(
'getAndroidVersion',
);
// Android 12+ has additional restrictions
if (androidVersion != null && androidVersion >= 31) {
// For Android 12+, check if the app can schedule exact alarms
final canScheduleExactAlarms = await methodChannel.invokeMethod<bool>(
'canScheduleExactAlarms',
);
if (canScheduleExactAlarms == false) {
// If not, we need to direct the user to system settings
if (_context != null) {
await _showAlarmPermissionDialog();
}
return 'OPEN_SETTINGS';
}
}
} catch (e) {
debugPrint('Error checking alarm permissions: $e');
}
}
// Default implementation
return _invokePermissionMethod('requestAlarmPermission');
}