接收和发送短信
2016-07-13 16:01
155 查看
package com.gao.smstest; import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.telephony.SmsManager; import android.telephony.SmsMessage; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; /** * 接收和发送短信 */ public class MainActivity extends AppCompatActivity { private TextView sender; private TextView content; private MessageReceiver mMessageReceiver; private IntentFilter mIntentFilter; private IntentFilter sendFilter; private SendStatusReceiver sendStatusReceiver; private EditText to; private EditText msgInput; private Button send; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); sender = (TextView) findViewById(R.id.sender); content = (TextView) findViewById(R.id.content); to = (EditText) findViewById(R.id.to); msgInput = (EditText) findViewById(R.id.msg_input); send = (Button) findViewById(R.id.send); send.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { SmsManager smsManager = SmsManager.getDefault(); //发送短信 smsManager.sendTextMessage(to.getText().toString(), null, msgInput.getText().toString(), null, null); } }); sendFilter = new IntentFilter(); sendFilter.addAction("SENT_SMS_ACTION"); sendStatusReceiver = new SendStatusReceiver(); registerReceiver(sendStatusReceiver, sendFilter); send.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { SmsManager smsManager = SmsManager.getDefault(); Intent sentIntent = new Intent("SENT_SMS_ACTION"); PendingIntent pi = PendingIntent.getBroadcast (MainActivity.this, 0, sentIntent, 0); smsManager.sendTextMessage(to.getText().toString(), null, msgInput.getText().toString(), pi, null); } }); //动态注册广播 mIntentFilter = new IntentFilter(); mIntentFilter.addAction("android.provider.Telephony.SMS_RECEIVED"); mMessageReceiver = new MessageReceiver(); registerReceiver(mMessageReceiver, mIntentFilter); } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(mMessageReceiver); //取消注册 广播 } // 创建一个广播接收器来接收系统发出的短信广播 class MessageReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Bundle bundle = intent.getExtras(); /** * pdu为承载着一条短信的所有短信。 * 一条短信为140个英文字符长度,在这个长度范围内, * 即需一个pdu即可。超出这个范围,即要分割成多个pdu数组。 */ //提取短消息 Object[] pdus = (Object[]) bundle.get("pdus"); SmsMessage[] messages = new SmsMessage[pdus.length]; for (int i = 0; i < messages.length; i++) { //使用 SmsMessage 的createFromPdu()方法将每一个 pdu 字节数组转换为 SmsMessage 对象 messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); } // 获取发送方号码 String address = messages[0].getOriginatingAddress(); //获取短信内容 String fullMessage = ""; for (SmsMessage smsMessage : messages) { fullMessage += smsMessage.getMessageBody(); //获取短信内容 } sender.setText(address); content.setText(fullMessage); abortBroadcast(); //中断向下发送短信息 } } private class SendStatusReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { if (getResultCode() == RESULT_OK) { // 短信发送成功 Toast.makeText(context, "Send succeeded", Toast.LENGTH_LONG).show(); } else { // 短信发送失败 Toast.makeText(context, "Send failed", Toast.LENGTH_LONG).show(); } } } /** * 每条短信的长度不得超过 140 个字符,如果想要发送超出这个长度的短信, * 则需要将这条短信分割成多条短信来发送,使用 SmsManager的 sendMultipart-TextMessage()方法就可以实现上述功能。 * 它的用法和 sendTextMessage()方法也基本类似 */ }
布局文件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.gao.smstest.MainActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="48dp" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:padding="10dp" android:text="From: "/> <TextView android:id="@+id/sender" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical"/> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="48dp" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:padding="10dp" android:text="Content: "/> <TextView android:id="@+id/content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical"/> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="50dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:padding="10dp" android:text="To:"/> <!--用于输入接收方的手机号码--> <EditText android:id="@+id/to" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_weight="1"/> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="50dp"> <!--一个 EditText 和一个 Button, 分别用于输入短信内容和发送短信--> <EditText android:id="@+id/msg_input" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_weight="1"/> <Button android:id="@+id/send" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:text="Send"/> </LinearLayout> </LinearLayout>
在清单文件中的权限
<uses-permission android:name="android.permission.RECEIVE_SMS"/> <uses-permission android:name="android.permission.SEND_SMS"/>
相关文章推荐
- 基于JavaScript短信验证码如何实现
- Android接收和发送短信处理
- Android开发中实现发送短信的小程序示例
- 基于JavaScript实现手机短信按钮倒计时(超简单)
- Android短信操作常见协议和常用代码
- 仿iphone中短信以及通话记录的时间显示
- php短信接口代码
- 手机短信轰炸(图)
- SSH框架网上商城项目第26战之订单支付后发送短信提醒
- Android编程之SMS读取短信并保存到SQLite的方法
- Android实现短信加密功能(发送加密短信、解密本地短信)
- Android创建简单发送和接收短信应用
- 浅析Android手机卫士接收短信指令执行相应操作
- Android实现将已发送的短信写入短信数据库的方法
- Android短信发送器实现方法
- Android实现短信发送功能
- Android中简单的电话管理与短信管理App编写实例
- Android编程实现读取手机联系人、拨号、发送短信及长按菜单操作方法实例小结
- Android获取短信验证码的实现方法