Expo SDK 47托管应用中如何打开Android通知设置页面
解决新版Expo SDK打开Android通知设置页面报错问题
问题原因
旧代码依赖的Constants.manifest在新版Expo SDK(SDK 48+)中已被废弃,改为Constants.expoConfig,导致无法正确获取应用包名,最终生成的Intent参数data: 'package:'为空,触发No Activity found to handle Intent错误。
修复后的代码
import * as IntentLauncher from 'expo-intent-launcher'; import Constants from 'expo-constants'; const openNotificationSettings = async () => { // 获取应用包名:优先从expoConfig取生产/自定义客户端包名,否则用Expo Go的默认包名 const pkg = Constants.expoConfig?.android?.package || 'host.exp.exponent'; try { // 尝试直接打开通知设置页面 await IntentLauncher.startActivityAsync( IntentLauncher.ACTION_APP_NOTIFICATION_SETTINGS, { data: `package:${pkg}` } ); } catch (err) { // 兼容不直接支持通知设置Intent的旧设备,降级打开应用详情设置页 console.warn('无法直接打开通知设置,跳转至应用详情页'); await IntentLauncher.startActivityAsync( IntentLauncher.ACTION_APPLICATION_DETAILS_SETTINGS, { data: `package:${pkg}` } ); } };
关键说明
- 包名获取逻辑:新版Expo通过
Constants.expoConfig读取app.json/app.config.js中配置的android.package字段,开发环境下该字段为空,自动 fallback 到Expo Go的包名host.exp.exponent。 - 异常处理:部分Android 7.0以下设备可能不支持直接打开通知设置的Intent,此时降级到应用详情设置页面,用户可手动进入通知设置模块。
内容的提问来源于stack exchange,提问作者Gus Beringer
相关产品推荐
相关产品推荐

