文档明确标注,却无法调用NotificationChannel的isBlockable()方法
Flutter插件中访问NotificationChannel.isBlockable()的问题解决
问题核心
开发Flutter插件时,需要判断Android通知渠道是否可被屏蔽,官方文档显示NotificationChannel类有isBlockable()方法,但无法访问——原因是该方法为Android API 31(Android 12)及以上版本新增,若项目构建配置未适配对应API级别,就会出现无法调用的情况。
解决步骤
1. 升级Android构建配置
在Flutter项目的android/app/build.gradle文件中,将编译和目标SDK版本提升至31或更高:
android { compileSdkVersion 34 defaultConfig { targetSdkVersion 34 } }
同时确保根目录android/build.gradle中的gradle插件版本兼容(需7.0.0及以上):
buildscript { dependencies { classpath 'com.android.tools.build:gradle:7.4.2' } }
2. 兼容低版本API
由于isBlockable()仅在Android 12+可用,需添加版本判断逻辑,避免低版本设备崩溃:
Java实现
import android.os.Build; import android.app.NotificationChannel; // 获取目标NotificationChannel实例后 boolean isBlockable; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { isBlockable = notificationChannel.isBlockable(); } else { // Android 12之前所有通知渠道默认可屏蔽 isBlockable = true; }
Kotlin实现
import android.os.Build import android.app.NotificationChannel // 获取目标NotificationChannel实例后 val isBlockable = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { notificationChannel.isBlockable } else { true }
3. 补充:判断通知渠道是否已被屏蔽
若需判断渠道是否已被用户屏蔽,可使用全版本兼容的getImportance()方法:
// Java boolean isChannelBlocked = notificationChannel.getImportance() == NotificationManager.IMPORTANCE_NONE;
// Kotlin val isChannelBlocked = notificationChannel.importance == NotificationManager.IMPORTANCE_NONE
内容的提问来源于stack exchange,提问作者Imed Boumalek
相关产品推荐
相关产品推荐

