
1、定义一个接收短信的广播:当手机接收到一条短信的时候,系统会发出一条值为android.provider.Telephony.SMS_RECEIVED 的广播,这条广播里携带着与短信相关的所有数据。
// 接收短信的广播class MessageReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Bundle bundle = intent.getExtras();Object[] pdus = (Object[]) bundle.get("pdus"); // 提取短信消息SmsMessage[] messages = new SmsMessage[pdus.length];for (int i = 0; i < messages.length; i++) {messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);}String address = messages[0].getOriginatingAddress(); // 获取发送方号码String fullMessage = "";for (SmsMessage message : messages) {fullMessage += message.getMessageBody(); // 获取短信内容}textView.setText("address; " + address + ", message: " + fullMessage);abortBroadcast();}} 2、 注册广播,这里我们动态在代码中注册:// 注册接收广播IntentFilter intentFilter1 = new IntentFilter();intentFilter1.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);intentFilter1.addAction("android.provider.Telephony.SMS_RECEIVED");messageReceiver = new MessageReceiver();registerReceiver(messageReceiver, intentFilter1);3、 声明权限:
<uses-permission android:name="android.permission.SEND_SMS" /><uses-permission android:name="android.permission.RECEIVE_SMS" />二、发送短信
// 发送短信public void send(View view) {SmsManager smsManager = SmsManager.getDefault();String destinationAddress = "15527100207";String text = "我爱你!";Intent intent1 = new Intent(SENT_SMS_ACTION);PendingIntent sentIntent = PendingIntent.getBroadcast(this, 0, intent1, 0);Intent intent2 = new Intent(DELIVERY_SMS_ACTION);PendingIntent deliveryIntent = PendingIntent.getBroadcast(this, 0, intent2, 0);smsManager.sendTextMessage(destinationAddress, null, text, sentIntent, deliveryIntent); // aidl服务,进程间的通信}public void sendTextMessage(String destinationAddress, String scAddress, String text,PendingIntent sentIntent, PendingIntent deliveryIntent)destinationAddress: // 目的地,也就是对方的手机号scAddress: // 服务中心地址,为空的话就是默认的SMSCtext:// 发送消息的具体内容sentIntent: // 当消息成功或者失败发送时,就发起这个广播deliveryIntent: // 当消息到达目的地时,就发起这个广播2、 sentIntent的广播:
// 发送短信的状态广播class MessageBroadcast extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {// 一个10位数的号码发送,也能成功,但是对方没有接收短信。if (getResultCode() == RESULT_OK) {Toast.makeText(MainActivity.this, "发送成功!", Toast.LENGTH_SHORT).show();} else {Toast.makeText(MainActivity.this, "发送失败!", Toast.LENGTH_SHORT).show();}}} 3、 deliveryIntent的广播:// 当消息被传递给收件人时 class DeliveryBroadcast extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Toast.makeText(MainActivity.this, "对方接收短信成功!", Toast.LENGTH_SHORT).show();}}以上就是本文的全部内容,希望对大家的学习有所帮助。