发表于: 2018-11-26 23:38:52

1 919


一、今天完成的事情

发送短信的两种方法

1.调用系统已有程序发送

Intent sendMessage = new Intent(Intent.ACTION_SENDTO);
sendMessage.setData(Uri.parse("smsto:" + phoneNumberET.getText()));
sendMessage.putExtra("sms_body", messageET.getText().toString());
startActivity(sendMessage);


2.调用系统API发送

主要用到了SmsManager

获取SmsManager

SmsManager smsManager = SmsManager.getDefault();

一些公共方法

smsManager.divideMessage(message);

将短信内容进行拆分,一条短信最多70个中文字符,当超过70个字符时,可以用divideMessage方法将短信拆分,然后分条发送。

sendTextMessage(String destinationAddress, String scAddress, String text,PendingIntent sentIntent, PendingIntent deliveryIntent)

sendMultipartTextMessage(String destinationAddress, String scAddress, ArrayList<String> parts, ArrayList<PendingIntent> sentIntents, ArrayList<PendingIntent> deliveryIntents)

发送短信,sendTextMessage是分条发送,分条接收,sendMultipartTextMessage实际上也是将短信分条发送,只不过我们看到的短信是一整条的,效果如图

具体代码

//分条发送、接收
public void sendMessage(String phoneNumber, String message) {
   if (!TextUtils.isEmpty(phoneNumber) && !TextUtils.isEmpty(message)) {
       SmsManager smsManager = SmsManager.getDefault();
       Intent itSend = new Intent(SMS_SEND_ACTION);
       Intent itDeliver = new Intent(SMS_DELIVERED_ACTION);
       PendingIntent piSend = PendingIntent.getBroadcast(
               CallActivity.this, 0, itSend, 0);
       PendingIntent piDeliver = PendingIntent.getBroadcast(
               CallActivity.this, 0, itDeliver, 0);

       if (message.length() > 70) {
           //拆分短信,70字符为一String,将String存入List
           ArrayList<String> msgs = smsManager.divideMessage(message);
           for (String msg : msgs) {
               smsManager.sendTextMessage(phoneNumber, null, msg, piSend, piDeliver);
           }
       } else {
           smsManager.sendTextMessage(phoneNumber, null, message, piSend, piDeliver);
       }
   } else {
       Toast.makeText(CallActivity.this, "号码和内容不能为空", Toast.LENGTH_SHORT).show();
   }
}

//合并发送、接收
public void sendMessage2(String phoneNumber, String message) {
   if (!TextUtils.isEmpty(phoneNumber) && !TextUtils.isEmpty(message)) {
       SmsManager smsManager = SmsManager.getDefault();
       Intent itSend = new Intent(SMS_SEND_ACTION);
       Intent itDeliver = new Intent(SMS_DELIVERED_ACTION);
       PendingIntent piSend = PendingIntent.getBroadcast(
               CallActivity.this, 0, itSend, 0);
       PendingIntent piDeliver = PendingIntent.getBroadcast(
               CallActivity.this, 0, itDeliver, 0);

       ArrayList<PendingIntent> piSends = new ArrayList<PendingIntent>();
       ArrayList<PendingIntent> piDelivers = new ArrayList<PendingIntent>();

       if (message.length() > 70) {
           //拆分短信,70字符为一String,将String存入List
           ArrayList<String> msgs = smsManager.divideMessage(message);
           for (int i = 0; i < msgs.size(); i++) {
               piSends.add(piSend);
               piDelivers.add(piDeliver);
           }
           smsManager.sendMultipartTextMessage(phoneNumber, null, msgs, piSends, piDelivers);
       } else {
           smsManager.sendTextMessage(phoneNumber, null, message, piSend, piDeliver);
       }
   } else {
       Toast.makeText(CallActivity.this, "号码和内容不能为空", Toast.LENGTH_SHORT).show();
   }
}

返送完成后通过广播获取发送结果

public class SMSReceiver extends BroadcastReceiver {

   private static final String TAG = "SMSReceiver";

   @Override
   public void onReceive(Context context, Intent intent) {

       if (intent.getAction().equals(CallActivity.SMS_SEND_ACTION)) {
           switch (getResultCode()) {
               case Activity.RESULT_OK:
                   Log.i(TAG, "onReceive: 发送成功");
                   Toast.makeText(context, "发送成功", Toast.LENGTH_SHORT).show();
                   break;
               case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                   Log.i(TAG, "onReceive: 发送失败");
                   Toast.makeText(context, "发送失败", Toast.LENGTH_SHORT).show();
                   break;
               case SmsManager.RESULT_ERROR_RADIO_OFF:
                   break;
               case SmsManager.RESULT_ERROR_NULL_PDU:
                   break;
               default:
                   break;
           }
       } else if(intent.getAction().equals(CallActivity.SMS_DELIVERED_ACTION)) {
           switch (getResultCode()) {
               case Activity.RESULT_OK:
                   Toast.makeText(context, "接收成功", Toast.LENGTH_SHORT).show();
                   break;
               case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                   Toast.makeText(context, "接收失败", Toast.LENGTH_SHORT).show();
                   break;
               case SmsManager.RESULT_ERROR_RADIO_OFF:
                   break;
               case SmsManager.RESULT_ERROR_NULL_PDU:
                   break;
               default:
                   break;
           }
       }
   }
}

三、遇到的问题    


四、收获

SmsManager




返回列表 返回列表
评论

    分享到