Android软件开发之发送短信与系统短信库解析(2)

我给12345回一条消息我们会看的更清楚这些节点的意义。


Android软件开发之发送短信与系统短信库解析





我们在看看thread_id指向的thread表
上图中可以清晰的看到 收到消息与回复消息的thread_id都为1 ,那么在thread_id这张表中

_id 不用说了吧,标示它的唯一性
date:表示最后接收或者发送消息的时间
message_count:表示发送消息的数量,这里我接收到了一条消息 也回复了一条消息那么它的数量就为2
recipient_ids:联系人ID,指向表 canonical_addresses 里的id。
snippet :最后收到或者发送的消息内容,就是上图body中存的东西




Android软件开发之发送短信与系统短信库解析




这么看来如果须要短信库中的数据就去访问数据库中的这两张表,sms表 uri 指向的是 "content://mms-sms/" thread表 uri指向的是"content://mms-sms/threadID" 具体访问的方法请看Android游戏开发之数据库SQLite 详细介绍 见   这里就不详细的说了。

下面进入本章代码部分的正题,调用系统方法给联系人号码发送消息




Android软件开发之发送短信与系统短信库解析



    /**
     * 参数说明
     * destinationAddress:收信人的手机号码
     * scAddress:发信人的手机号码
     * text:发送信息的内容
     * sentIntent:发送是否成功的回执,用于监听短信是否发送成功。
     * DeliveryIntent:接收是否成功的回执,用于监听短信对方是否接收成功。
     */

这里我主要说一下最后两个参数, SentIntent 这个intent用于接收这条信息自己发送成功还是自己发送失败, DeliveryIntent这个intent用于对方是否接受成功。 发送成功和接受成功是不一样的,发送只是把消息发到手机移动或联通运行商那里叫发送成功,至于以后怎么处理它不关心,只管发送是否成功。 而接受成功表示接受者是否将这条消息收到。

   private void sendSMS(String phoneNumber, String message) {   // ---sends an SMS message to another device---    SmsManager sms = SmsManager.getDefault();      // create the sentIntent parameter    Intent sentIntent = new Intent(SENT_SMS_ACTION);   PendingIntent sentPI = PendingIntent.getBroadcast(this0, sentIntent,       0);      // create the deilverIntent parameter    Intent deliverIntent = new Intent(DELIVERED_SMS_ACTION);   PendingIntent deliverPI = PendingIntent.getBroadcast(this0,       deliverIntent, 0);      //如果短信内容超过70个字符 将这条短信拆成多条短信发送出去    if (message.length() > 70) {       ArrayList<String> msgs = sms.divideMessage(message);       for (String msg : msgs) {       sms.sendTextMessage(phoneNumber, null, msg, sentPI, deliverPI);       }   else {       sms.sendTextMessage(phoneNumber, null, message, sentPI, deliverPI);   }      }  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwggjd.html