sendSMS方法无法跳转至设备默认短信应用问题咨询
问题解决方案
根因说明
2024年8月中下旬Codename One安卓端核心库为适配Google Play短信权限合规政策,调整了sendSMS接口的默认逻辑:旧版本默认会主动申请SEND_SMS权限,权限通过后跳转系统短信应用;新版本为避免应用因不必要的短信权限申请被Google Play拒审,取消了接口内置的权限申请逻辑,所以直接调用会无响应。dial接口逻辑未做调整,拨号权限的合规要求与短信权限不同,因此可正常使用。
解决方案
根据你的使用场景二选一即可:
方案1:保留原有sendSMS调用逻辑(需要申请短信权限)
- 第一步:在项目
codenameone_settings.properties配置文件中添加短信权限声明:android.permission.SEND_SMS=true - 第二步:调用
sendSMS前先显式申请权限,示例代码如下:Permission.request(Permission.SMS, permissionGranted -> { if (permissionGranted) { Display.getInstance().sendSMS(phoneNumber, message, true); } else { // 补充权限被拒绝的兜底逻辑 } });
方案2:直接调起系统短信应用(无需申请短信权限,更符合Google Play合规要求)
如果你的需求仅为跳转到系统短信应用让用户自主编辑发送,不需要后台发送功能,建议直接用系统意图调用,完全不用申请短信权限,也不会触发Google Play的权限审核问题,示例代码如下:
String encodedMessage = URLEncoder.encode(message, StandardCharsets.UTF_8.name()); Display.getInstance().execute("sms:" + phoneNumber + "?body=" + encodedMessage);
内容的提问来源于stack exchange,提问作者James N
相关产品推荐
相关产品推荐

