Codename One本地通知在Android设备上无法显示
Android 13上Codename One本地通知不显示的解决方法
Android 13(API 33+)新增了POST_NOTIFICATIONS权限强制要求,应用必须主动获取该权限才能发送本地通知,这是导致你的通知在Android 13设备上无法显示的核心原因。以下是具体解决步骤:
添加权限声明
在项目的android/AndroidManifest.xml文件中添加权限声明:<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />主动申请权限并调度通知
在调用通知调度代码前,先检查并申请权限,示例代码如下:// 检查Android版本及权限状态 if (Display.getInstance().getPlatformName().equals("Android") && Integer.parseInt(Display.getInstance().getPlatformVersion()) >= 33) { String notificationPerm = android.Manifest.permission.POST_NOTIFICATIONS; if (!Display.getInstance().checkPermission(notificationPerm)) { Display.getInstance().requestPermissions(new String[]{notificationPerm}, 0); return; // 等待用户授权后再执行通知调度 } } // 原通知调度代码 LocalNotification n = new LocalNotification(); n.setId("demo-notification"); n.setAlertBody("It's time to take a break and look at me"); n.setAlertTitle("Break Time!"); // n.setAlertSound("/notification_sound_beep-01a.mp3"); // alert sound file name must begin with notification_sound Display.getInstance().scheduleLocalNotification( n, System.currentTimeMillis() + 10 * 1000, // fire date/time LocalNotification.REPEAT_MINUTE // Whether to repeat and what frequency );处理权限申请结果
重写permissionResult方法,在用户授权后重新触发通知调度:@Override public void permissionResult(String[] permissions, int[] grantResults) { for (int i = 0; i < permissions.length; i++) { if (permissions[i].equals(android.Manifest.permission.POST_NOTIFICATIONS) && grantResults[i] == Display.PERMISSION_GRANTED) { // 封装原通知代码为scheduleNotification方法,此处调用 scheduleNotification(); } } }
注意:若应用目标SDK版本为33及以上,该权限申请是强制要求;即使目标SDK低于33,添加权限申请也能避免后续版本兼容问题。
内容的提问来源于stack exchange,提问作者Renz
相关产品推荐
相关产品推荐

