Android发短信代码
经常看到网上的短信DEMO代码, 里面的发短信使用了SmsManager的sendTextMessage()方法, 这个方法的弊端是仅仅是简单地把短信发出去.
如果想实现发出的短信保留在”已发送”或”发送失败”中(由系统负责), 则需要用下面方法. 思路是: 不直接发出短信短, 而是把短信放到系统数据库content://sms/queued中(这一数据库保存的是待发送短信的队列),然后发一条广播通知系统将待发送的短信发出去. 这样就可以在发送后在相关的信箱中找到已发送的这条短信.
这是我这个新手很辛苦从Android源码中找到线索的, 希望看到这篇博文的朋友点个赞.下面是代码片段:
//发送信息
//String address表示对方号码, String body表示短信内容
void sendMsg(address,body)
{
//如果是长短信,自动分割. divideMessage()方法是智能的, 不用担心信息过短
ArrayList<String> msgs = SmsManager.getDefault().divideMessage(body);
//遍历分割的短信
for(String msg : msgs)
{
//设置时间,号码,内容,协议,状态
ContentValues value=new ContentValues();
value.put("date",System.currentTimeMillis());
value.put("address", address);
value.put("body", msg);
value.put("protocol", 0);
value.put("status",64);
//type=6表示发送队列(content://sms/queued)
value.put("type",6);
//将短信放入queued
getContentResolver().insert(Uri.parse("content://sms"),value);
}
//发送一条广播,通知系统发送queued中的短信
Intent intent=new Intent("com.android.mms.transaction.SEND_MESSAGE");
sendBroadcast(intent);
}