Android 14工作配置文件中应用无法编程发送SMS的问题求助
Android 14工作配置文件下短信发送问题解决方案
以下是针对Android 14工作配置文件中SmsManager失效问题的具体排查和解决步骤:
确认权限的工作配置文件范围
确保SEND_SMS权限不仅在Manifest中声明,且运行时权限请求是在工作配置文件的上下文下完成的。你可以通过以下代码验证权限状态:if (context.checkSelfPermission(Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED) { // 重新请求工作配置文件下的SEND_SMS权限 ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.SEND_SMS}, REQUEST_CODE_SMS); }注意:部分设备的权限管理界面会区分个人/工作配置文件权限,需确认工作配置文件下的权限已开启。
使用工作上下文获取SmsManager实例
Android 14中,全局SmsManager.getDefault()可能默认绑定个人配置文件的资源,导致工作配置文件中无法正常工作。应直接从工作配置文件的Context获取实例:// 从当前工作上下文获取SmsManager SmsManager smsManager = context.getSystemService(SmsManager.class);处理多SIM卡场景的订阅ID
如果设备存在多SIM卡,需确保使用工作配置文件对应的SIM卡订阅ID来获取SmsManager:TelephonyManager telephonyManager = context.getSystemService(TelephonyManager.class); List<SubscriptionInfo> subscriptionList = telephonyManager.getSubscriptionInfoList(); if (subscriptionList != null) { for (SubscriptionInfo info : subscriptionList) { // 筛选工作配置文件关联的SIM卡 if (info.isWorkProfile()) { SmsManager smsManager = SmsManager.getSmsManagerForSubscriptionId(info.getSubscriptionId()); // 执行短信发送操作 smsManager.sendTextMessage(phoneNum, null, content, sentIntent, deliveredIntent); break; } } }验证广播接收器配置
发送短信时传入的sentIntent和deliveredIntent对应的广播接收器,需在Manifest中正确注册,且确保接收器的权限配置符合Android 14要求:<receiver android:name=".SmsSentReceiver" android:exported="false"> <intent-filter> <action android:name="com.yourpackage.SMS_SENT"/> </intent-filter> </receiver>排除MDM策略限制
如果你的应用是企业级应用,需确认MDM(移动设备管理)策略是否在Android 14中新增了工作配置文件的短信发送限制,可联系MDM管理员核实配置。
内容的提问来源于stack exchange,提问作者DevMobile950
相关产品推荐
相关产品推荐

