Android如何实现接收和发送短信

Android如何实现接收和发送短信,第1张

概述每一部手机都具有短信接收和发送功能,下面我们通过代码来实现接收和发送短信功能。 

每一部手机都具有短信接收和发送功能,下面我们通过代码来实现接收和发送短信功能。 

一、接收短信

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如何实现接收和发送短信所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1141452.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存