Flutter使用permission_handler请求通知权限不会弹出权限弹窗
Flutter中使用了 permission_handler 插件。
Permission.notification.request()
这样调用,来请求通知权限,怎么弄都不会弹出来权限弹窗。在iOS端上都是正常的。
解决办法:
Future<void> sendTestNotification() async {
FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
FlutterLocalNotificationsPlugin();
const AndroidInitializationSettings initializationSettingsAndroid =
AndroidInitializationSettings('@mipmap/ic_launcher');
const InitializationSettings initializationSettings = InitializationSettings(
android: initializationSettingsAndroid,
);
await flutterLocalNotificationsPlugin.initialize(initializationSettings);
const AndroidNotificationDetails androidPlatformChannelSpecifics =
AndroidNotificationDetails('test_channel', 'Test Notifications',
importance: Importance.min, priority: Priority.min, playSound: false);
const NotificationDetails platformChannelSpecifics =
NotificationDetails(android: androidPlatformChannelSpecifics);
await flutterLocalNotificationsPlugin.show(
0, '静默发送通知', '这是一条开启权限的静默通知消息', platformChannelSpecifics);
}
在调用 Permission.notification.request() 之前,如上代码所示,发送一条静默消息,就可以调起权限弹窗。 这样就解决了。
另外,不只是通知权限, 其他的权限申请,在Flutter上面,最好的做法是先执行再说,比如拍照,应该先直接去调用拍照的API,这样系统就弹出了权限弹框,而不是先调用 .request(),这样不太好,如果申请不到权限,后面的就不执行了。
可以把permission_handler调用放在拍照的后面,比如拍照的时候调用拍照API,用户没有允许拍照权限,那API会报错,这个时候再去调用 permission_handler 来获取权限结果,根本结果提示用户就行了。