精通Android4学习笔记-电话API-SMS

原创 2013年12月04日 09:32:02

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

 

android中Mms学习笔记——短信(sms)发送流程(二)

在笔记一中的WorkingMessage.send()方法中已经对sms和mms的处理有了区别,他们都开器自己各自的线程进后续的发送工作,接下来针对sms和mms做不同的处理。 一.首先进入preS...

SMS学习笔记

  • 2014年10月08日 10:23
  • 5.64MB
  • 下载

【汇编学习笔记】4:电话号查找(文件指针读取文件)

首先在一个文本文件中写入一些电话号码,为了读取的方便,指定它们有固定的格式,并且以dollar串结束符结束,便于用3FH号功能读取文件和09H号功能输出。 注意,虽然3FH号功能读入的东西,在输...

java4android的学习笔记

  • 2015年03月23日 14:48
  • 294KB
  • 下载

ANDROID学习笔记4

  • 2014年11月17日 23:39
  • 650KB
  • 下载

android学习笔记---38_采用广播接收者拦截外拔电话,实现原理以及实例源码

38_采用广播接收者拦截外拔电话及其特性 这个程序是在原来的基础上进行的: 用到了,上一个工程SMSListener 首先在清单文件中添加,外拨电话的广播接受者           ...

android学习笔记最新版(1-4)

  • 2009年09月02日 09:17
  • 3.19MB
  • 下载

android学习笔记4--socket

  • 2013年02月18日 17:43
  • 134KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:精通Android4学习笔记-电话API-SMS
举报原因:
原因补充:

(最多只允许输入30个字)