Android中SmsManager代码报IllegalArgumentException,请求排查解决
解决SmsManager.sendTextMessage抛出IllegalArgumentException的问题
抛出IllegalArgumentException基本是参数不合法导致的,结合你的代码,从这几个方向排查:
检查目标号码有效性
确认userPhonePlaceOrder.getText().toString().trim()的结果不是空串、也没有非数字字符(比如空格、符号)。很多时候trim后可能因为输入框为空变成空字符串,直接传空号码会触发这个异常。可以先打印这个值,或者加个非空判断。检查短信内容是否合规
如果userNamePlaceOrder.getText().toString()是空串,部分系统会拒绝发送并抛出异常;另外如果内容长度超过单条短信上限(普通短信70字符,Unicode短信160字符),也会触发异常,这种情况需要用sendMultipartTextMessage拆分发送。添加参数校验逻辑
给参数加非空判断再执行发送,避免空参数传入:String targetPhone = userPhonePlaceOrder.getText().toString().trim(); String messageContent = userNamePlaceOrder.getText().toString(); if (!TextUtils.isEmpty(targetPhone) && !TextUtils.isEmpty(messageContent)) { SmsManager smsManager = SmsManager.getDefault(); smsManager.sendTextMessage(targetPhone, null, messageContent, null, null); } else { // 处理号码或内容为空的情况,比如提示用户输入完整信息 }核对项目配置差异
既然相同代码在其他项目能跑,检查当前项目的targetSdkVersion是否和正常项目一致,部分高版本SDK对短信发送的参数校验更严格;另外确认权限声明是否完全一致(比如是否在Manifest里加了<uses-permission android:name="android.permission.SEND_SMS"/>,并且动态申请了权限)。
内容的提问来源于stack exchange,提问作者1239-Ayush VaZe
相关产品推荐
相关产品推荐

