android中SMS 1.在Android中,SMS消息传递是由SmsManager进行处理的。可以通过静态方法SmsManager.getDefault()来获得对SmsManager的引用,如下:

    SmsManagersmsManager = SmsManager..getDefault();

2.Android中,要接收和发送SMS需要以下两个权限

    <uses-permission android:name="android.permission.READ_SMS" />
   <uses-permission android:name="android.permission.RECEIVE_SMS" />

3.SMS的发送

    1) 发送文本信息,可以使用SMS Manager 中的sendTextManager 的方法

     sendTextMessage(destinationAddress, scAddress, text, sentIntent, deliveryIntent);

     参数如下:

        destinationAddress:接收方的手机号码

        scAddress:发送方的手机号码

        text:信息内容

        sentIntent:发送是否成功的回执,会在消息发送成功或者失败后触发。

        DeliveryIntent:接收是否成功的回执,当目标接收人收到你的信息后触发。

    2)跟踪和确认SMS消息的发送

        sendTextMessage(destinationAddress, scAddress, text, sentIntent, deliveryIntent);

        参数sentlntent的返回码如下:

        Activity.RESULT_OK:表示发送成功

        RESULT_ERROR_GENERIC_FAILURE :表示发生了为指定的错误

        RESULT_ERROR_RADIO_OFF :表示连接的无线信号被 关闭

        RESULT_ERROR_NULL_PDU:表示PDU错误

    3)发送SMS以及监控它的发送过程是否成功的经典示例:

        String SEND_SMS_ACTION = "SENT_SMS_ACTION";
        String DELIVERED_SMS_ACTION = "DELIVERED_SMS_ACTION";
        //创建senTIntent参数
       Intent sentIntent = new Intent(SEND_SMS_ACTION);
        PendingIntent sentPI = PendingIntent.getBroadcast(getApplicationContext(), 0, sentIntent, 0);
       //创建deliveredIntent参数
        Intent deliveredIntent = new Intent(DELIVERED_SMS_ACTION);
       PendingIntent delivePI = PendingIntent.getBroadcast(getApplicationContext(), 0, deliveredIntent, 0);

         //注册广播器
        registerReceiver(new BroadcastReceiver(){

         @Override
       public void onReceive(Context context, Intent intent) {
         // TODO Auto-generated method stub
        switch (getResultCode()) {
           case Activity.RESULT_OK:
             ....
           case RESULT_ERROR_GENERIC_FAILURE:
             ....
           case RESULT_ERROR_RADIO_OFF:
             ....
            case RESULT_ERROR_NULL_PDU:
             ....
            }
            }
         },
        new IntentFilter(SEND_SMS_ACTION));
        

            //注册广播器
            registerReceiver(new BroadcastReceiver(){

            @Override
             public void onReceive(Context context, Intent intent) {
                // TODO Auto-generated method stub
                ....
                 }
              }
        },
        new IntentFilter(DELIVERED_SMS_ACTION));

    4)保证不超过最大的SMS信息大小

        SMS的大小一般被限制为160个字符,比它大的信息会被分割为多个小的部分。SMS Manager的divideMeaasge方法可    以接收一个字符串作为输入,并把他分割到一个消息的ArrayList中,每一个消息都比允许的最大长度小。使用sendMultipartTextM    essage可以发送消息数组。如下:

        ArrayList<String> messageArray - smsManager.divideMeaasge(myMessage);

        ArrayList<PendingIntent> sentIntents = new ArrayList<Pendinglntent>();

        for(int i = 0; i < messageArrsy.size(); i ++)

        {

            sentIntents.add(sentPI);

            smsManager.sendMultipartTextMessage(sendTo,null,messageArray,sentintent,null);

        }

    5)发送数据消息

    使用SMS Manager的sendDataMessage方法,可以经由SMS来发送二进制数据。

    sendDataMessage与sendTextMessage方法相似,前者需要额外的参数:信息到达的目的端口和由你想发送的数据所组成的一个    字节数组    

    short destinationPort = 80;

    byte[] data = [...you data ...];

    smsManager.sendDataMessage(sendTo,null,destinationPort ,data,sentPI,null);

4.SMS的监听

    SMS广播Intent包含了收到的SMS的详细信息。要提取封装在SMS广播的SmsManager对象,需要使用PDU密钥来提取一个SMS

    pdus数组,其中每一个pdu都表示一条SMS信息。

    如下:

    Bundle bundle = intent.getExtras();

    Object[] pdus = (Object[]) bundle.get("pdus");

   SmsMessage[] msgs = new SmsMessage[pdus.length];

   for (int i = 0; i < pdus.length; i++) {

   msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);

   }

    每一个SMS Manager对象都包含了SMSManager信息的详细内容(电话号码,时间戳,信息体)。

    要监听到来的信息,需要使用一个监听android.provider.Telephony.SMS_RECEIVED动作串的Intent Filter 来注册一个广播接收     器。如下:

    final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED动作串的Intent Filter";    

    IntentFilter filter = new IntentFilter(SMS_RECEIVED );

    BroadcastReceiver receiver = new IncomingSMSReceiver();

    registerReceiver(receiver ,filter);

更多相关文章

  1. Android中获取系统上安装的APP信息
  2. Android实现系统下拉栏的消息提示——Notification
  3. android 手机信息获得
  4. Android使用okhttp框架实现带参数Get和Post请求(附服务端完整代码
  5. Android 系统信息获取(CPU,RAM,ROM,Battery,SD-card,版本等)
  6. Unity发送参数给Android打开TestActivity0、TestActivity1
  7. Android屏幕信息获取

随机推荐

  1. Android(安卓)Messenger IPC 通信
  2. Java工程中调用Android库出现“Stub!”错
  3. android 重力感应
  4. wheelView自定义android日期时间选择器
  5. Android的NDK开发(2)————利用Android
  6. android Manifest.xml选项
  7. The Saygus VPhone V1 clears FCC, Will
  8. Android修改屏幕亮度
  9. Android(安卓)Textview 超出最多字数省略
  10. 原文:Android(安卓)Theme XML