1.发送SMS消息
发送SMS消息分为两个步骤:
a 发送 发送到消息中心
b 送达 接收者从消息中心接收到消息
SmsManager中有三个方法是用来发送SMS的。
sendTextMessage(String destAddress,String smscAddress,String txtMsg,PendingIntent sentIntent, PendingIntent deliveryIntent);
sendDataMessage多了一个参数,以指定一个接收者的特定端口号,而且消息的类型是byte[],而不是String;
sendMultipartTextMessage 方法接受的是数组,他在实际应用被更加广泛的使用,以支持超过一个sms段落的sms(一个sms段落长度:70个中文,140个英文字符)
另外需要说明的是:
参数中两个PI,分别用来广播发送成功和送达成功的事件;
一般来说,我们可以看看下面的代码示例:
ArrayList<String> messages = sManager.divideMessage(message);
int messageCount = messages.size();
Log.d(TAG, "sendSMS" + " to " + phoneNumber + " divideMessage:"
+ messageCount);ArrayList<PendingIntent> deliveryIntents = new ArrayList<PendingIntent>(
messageCount);
ArrayList<PendingIntent> sentIntents = new ArrayList<PendingIntent>(
messageCount);sentIntents.add(PendingIntent.getBroadcast(mContext,
(int) System.currentTimeMillis(), new Intent(SMS_SEND_ACTIOIN),
PendingIntent.FLAG_UPDATE_CURRENT));
sManager.sendMultipartTextMessage(phoneNumber, null, messages,
sentIntents, deliveryIntents);
上面的例子,用到了sentIntents,deliveryIntents实际上是空的。
2.接收SMS
哇,很方便。
从Pdu转换到String的方法,SmsMessage类里面都有提供;
不过需要注意的是,因为BroadcastReceiver必须在10秒中内处理完,所以不要在这里面做UI的操作,也不要做其他耗时的操作比如打开大文件或者网络存取。
如果真的要做耗时操作,那就start service去做(不要使用bindservice)。
3.使用SMS文件夹
public class SMSDraftDemo extends ListActivity {
private ListAdapter adapter;
private static final Uri SMS_INBOX = Uri.parse("content://sms/draft");
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
Cursor c = getContentResolver()
.query(SMS_INBOX, null, null, null, null);
startManagingCursor(c);
String[] columns = new String[] { "body" };
int[] names = new int[] { R.id.row };
adapter = new SimpleCursorAdapter(this, R.layout.sms_inbox, c, columns,
names);
setListAdapter(adapter);
}
}
以下是完整的SMS文件夹列表和每个文件夹的URI:
所有文件夹content://sms/all
收件箱 content://sms/inbox
已发送 content://sms/sent
草稿 content://sms/draft
发件箱 content://sms/outbox
发送失败 content://sms/failed
排队消息 content://sms/queued
未送达 content://sms/undelivered
对话 content://sms/conversations
android将MMS与SMS结合在一起,支持使用mms-sms的AUTHORITY同时访问两者的ContentProvider。因此,可以按如下形式访问URI:
content://mms-sms/conversations