《第一行代码-Android》学习笔记(十五)

来源:互联网 发布:知乎 德昌路 编辑:程序博客网 时间:2024/06/11 02:03

1.接收短信:采用广播直接,注册一个广播接收器,接收系统的android.provider.Telephoney.SMS_RECEIVED的广播,这条广播里会携带着相关的多有数据;

a) 在广播接收器的receiver()方法中解析数据:

 @Override

        public void onReceive(Context context, Intent intent)

        {

            Bundle bundle = intent.getExtras();

//使用pdu秘钥来提取一个SMS pdus数组,其中每一个pdu都表示一跳短信消息。

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

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

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

            {

//使用createFromPdu方法将每一个pdu字节数组转换成SmsMessage对象。

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

            }

            String address = messages[0].getOriginatingAddress();// 获取发送方号码

            String fullMessage = "";

            for(SmsMessage smsMessage : messages)

            {

//将每个SmsMessage对象中的短信内容拼接起来就是一条完整的短信了。

                fullMessage += smsMessage.getMessageBody();

            }

            fromTv.setText(address);

            contentTv.setText(fullMessage);

}

b) 需要注册一个权限:

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

 

2.拦截短信:系统发出的短信广播是一条有序广播,利用之前学习的有序广播知识,可以很轻松的拦截短息广播

a) filter.setPriority(100);设置广播接收器的接收等级

b) abortBroadcast();onreceiver中加入此方法,拦截广播

c) 拦截系统短息广播这个功能要慎用。防止拦截了重要信息

3. 发送短信:

a) 如何发送短信:

SmsManager smsManager = SmsManager.getDefault();

//加入PendingIntent的目的是为了能够捕捉短信是否发送成功,这里会延迟执行一个广播

PendingIntent pi = PendingIntent.getBroadcast(this, 0, new Intent("SEND_SMS_ACTION"), 0);

smsManager.sendTextMessage(toEt.getText().toString(), nullcontentEt.getText().toString(), pi, null);

b) 加入检测模拟器是否发送成功的广播接收器

        // 注册监听短息是否发送成功的广播

        IntentFilter sendFilter = new IntentFilter("SEND_SMS_ACTION");

        sendSmsBroadcastReceiver = new SendSmsBroadcastReceiver();

        registerReceiver(sendSmsBroadcastReceiver, sendFilter);

        

         class SendSmsBroadcastReceiver extends BroadcastReceiver

         {

        @Override

        public void onReceive(Context context, Intent intent)

        {

            if(getResultCode() == RESULT_OK)

            {

                Toast.makeText(context, "Send success"1).show();

            }

            else

            {

                Toast.makeText(context, "Send fail"1).show();

            }

        }

 

    }

 

4.SmsManager还有一个sendMultipartTextMessage()方法,可以实现将长度超过160字的短信分割。

0 0
原创粉丝点击