每一部手机都具有短信接收和发送功能,下面我们通过代码来实现接收和发送短信功能。
一、接收短信
1、创建内部广播接收器类,接收系统发出的短信广播
2、从获得的内容中解析出短信发送者和短信内容
3、在Activity中注册广播
4、添加接收短信权限
下面放上具体的代码
activity_main.xml文件用于显示短信发送者号码和显示短信内容
<?xml version="1.0" enCoding="utf-8"?><relativeLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:layout_wIDth="match_parent" androID:layout_height="match_parent"> <TextVIEw androID:ID="@+ID/sms_from" androID:layout_wIDth="wrap_content" androID:layout_height="20dp" androID:text="From" /> <TextVIEw androID:ID="@+ID/sms_from_txt" androID:layout_wIDth="wrap_content" androID:layout_height="20dp" androID:layout_marginleft="15dp" androID:layout_toRightOf="@ID/sms_from"/> <TextVIEw androID:ID="@+ID/sms_content" androID:layout_wIDth="wrap_content" androID:layout_height="20dp" androID:layout_below="@ID/sms_from" androID:layout_margintop="20dp" androID:text="Content" /> <TextVIEw androID:ID="@+ID/sms_content_txt" androID:layout_wIDth="wrap_content" androID:layout_height="20dp" androID:layout_marginleft="15dp" androID:layout_margintop="20dp" androID:layout_below="@ID/sms_from_txt" androID:layout_toRightOf="@ID/sms_content"/></relativeLayout>
MainActivity.java文件
public class MainActivity extends AppCompatActivity { private TextVIEw fromTv; private TextVIEw contentTv; private IntentFilter intentFilter; private MessageReceiver messageReceiver; @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_main); initVIEw(); getSms(); } private voID getSms() { intentFilter = new IntentFilter(); intentFilter.addAction("androID.provIDer.Telephony.SMS_RECEIVED"); messageReceiver = new MessageReceiver(); //设置较高的优先级 intentFilter.setPriority(100); registerReceiver(messageReceiver,intentFilter); } private voID initVIEw() { fromTv = (TextVIEw) findVIEwByID(R.ID.sms_from_txt); contentTv = (TextVIEw) findVIEwByID(R.ID.sms_content_txt); } @OverrIDe protected voID onDestroy() { super.onDestroy(); unregisterReceiver(messageReceiver); } class MessageReceiver extends broadcastReceiver { @OverrIDe public 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(); } //截断广播,阻止其继续被AndroID自带的短信程序接收到 abortbroadcast(); fromTv.setText(address); contentTv.setText(fullMessage); } }}
注:注册的广播接收器,一定要在OnDestroy()方法中取消注册。
由于短信广播是有序广播,如果我们不想让AndroID自带的短信程序接收到短信,就可以设置我们自身接收器的优先级,同时在我们接受完广播后将广播截断,阻止其被AndroID自带的短信程序接收到。
二、发送短信
1、获取接收者的号码和短信内容
2、获得短信发送管理实例
3、构造PendingIntent启动短信发送状态监控广播
4、调用发送短信函数,传入参数发送短信
5、构造广播接收器内部类监控短信是否发送成功
6、获得广播接收器实例和IntentFilter实例,注册广播接收器
7、在onDestroy()中取消注册的广播接收器
8、在AndroIDManifest.xml文件中加入短信发送权限
下面放上具体的布局文件和代码
activity_send_msg.xml文件
<?xml version="1.0" enCoding="utf-8"?><relativeLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:layout_wIDth="match_parent" androID:layout_height="match_parent"> <EditText androID:ID="@+ID/to_ed" androID:layout_wIDth="match_parent" androID:layout_height="50dp" androID:hint="to"/> <EditText androID:ID="@+ID/to_content" androID:layout_wIDth="match_parent" androID:layout_height="50dp" androID:layout_below="@ID/to_ed" androID:hint="content"/> <button androID:ID="@+ID/send_msg" androID:layout_wIDth="match_parent" androID:layout_height="50dp" androID:layout_below="@ID/to_content" androID:text="@string/send_message"/></relativeLayout>
SendMsgActivity.java文件
public class SendMsgActivity extends AppCompatActivity implements VIEw.OnClickListener { private Context context; private EditText toEdit; private EditText toContent; private IntentFilter sendFilter; private SendStatusReceiver sendStatusReceiver; @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_send_msg); context = this; initVIEw(); } private voID initVIEw() { toEdit = (EditText) findVIEwByID(R.ID.to_ed); toContent = (EditText) findVIEwByID(R.ID.to_content); //添加发送按钮的点击监听事件 button sendMsg = (button) findVIEwByID(R.ID.send_msg); sendMsg.setonClickListener(this); } @OverrIDe public voID onClick(VIEw vIEw) { switch (vIEw.getID()){ case R.ID.send_msg: sendMessage(); break; default: break; } } private voID sendMessage() { //获取短信接收者号码 String to = toEdit.getText().toString(); //获取发送短信内容 String content = toContent.getText().toString(); //获得广播接收器实例和IntentFilter实例 sendStatusReceiver = new SendStatusReceiver(); sendFilter = new IntentFilter(); sendFilter.addAction("SENT_SMS_ACTION"); //注册广播监听 registerReceiver(sendStatusReceiver,sendFilter); //构造PendingIntent启动短信发送状态监控广播 Intent sendIntent = new Intent("SENT_SMS_ACTION"); PendingIntent pi = PendingIntent.getbroadcast(context,sendIntent,0); //获得短信管理实例 SmsManager smsManager = SmsManager.getDefault(); //调用发送短信函数,传入参数发送短信(第一、三、四参数依次为接收者号码,短信内容,短信发送状态监控的PendingIntent) smsManager.sendTextMessage(to,null,content,pi,null); } /** * 构造广播接收器内部类监控短信是否发送成功 */ class SendStatusReceiver extends broadcastReceiver{ @OverrIDe public voID onReceive(Context context,Intent intent) { if (getResultCode() == RESulT_OK){ Toast.makeText(context,"successful",Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(context,"Failed",Toast.LENGTH_SHORT).show(); } } } @OverrIDe protected voID onDestroy() { super.onDestroy(); //取消注册的广播 unregisterReceiver(sendStatusReceiver); }}
在AndroIDManifest.xml文件中加入短信发送权限
<uses-permission androID:name="androID.permission.SEND_SMS"/>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。
总结以上是内存溢出为你收集整理的Android如何实现接收和发送短信全部内容,希望文章能够帮你解决Android如何实现接收和发送短信所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)