Android接收和发送短信处理

关于短信接收处理方面,当前已经有一些app做的比较好了,比如发给手机发验证码验证的问题,很多app在手机接收到验证码后,不需要输入,就直接可以跳过验证界面,这就是用到了对接收到的短信的处理。至于短信的发送,也没什么好说的了。在此也只是附上一个小实例。

效果图:

MainActivity:

import android.app.Activity;
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.telephony.SmsManager;
import android.telephony.SmsMessage;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast; 

public class MainActivity extends Activity { 

  private TextView sender;
  private TextView content;
  private IntentFilter receiveFilter;
  private MessageReceiver messageReceiver; 

  private EditText to;
  private EditText msgInput;
  private Button send;
  private IntentFilter sendFilter;
  private SendStatusReceiver sendStatusReceiver; 

  @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); 

    //为接收短信设置要监听的广播
    receiveFilter = new IntentFilter();
    receiveFilter.addAction("android.provider.Telephony.SMS_RECEIVED");
    messageReceiver = new MessageReceiver();
    registerReceiver(messageReceiver, receiveFilter); 

    //为发送短信设置要监听的广播
    sendFilter = new IntentFilter();
    sendFilter.addAction("SENT_SMS_ACTION");
    sendStatusReceiver = new SendStatusReceiver();
    registerReceiver(sendStatusReceiver, sendFilter); 

    send.setOnClickListener(new OnClickListener() {
      @Override
      public void onClick(View v) {
        //发送短信
        //并使用sendTextMessage的第四个参数对短信的发送状态进行监控
        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);
      }
    });
  } 

  @Override
  protected void onDestroy() {
    super.onDestroy();
    //在Activity摧毁的时候停止监听
    unregisterReceiver(messageReceiver);
    unregisterReceiver(sendStatusReceiver);
  } 

  class MessageReceiver extends BroadcastReceiver { 

    @Override
    public void onReceive(Context context, Intent intent) {
      Bundle bundle = intent.getExtras();
      //使用pdu秘钥来提取一个pdus数组
      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();
      }
      sender.setText(address);
      content.setText(fullMessage);
    } 

  } 

  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();
      }
    } 

  } 

} 

activity_main:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical" > 

  <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="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="50dp" > 

    <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
      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>

AndroidManifest:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.example.smstest"
  android:versionCode="1"
  android:versionName="1.0" > 

  <uses-sdk
    android:minSdkVersion="14"
    android:targetSdkVersion="17" /> 

  //接受短信
  <uses-permission android:name="android.permission.RECEIVE_SMS" />
  //发送短信
  <uses-permission android:name="android.permission.SEND_SMS" /> 

  <application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
      android:name="com.example.smstest.MainActivity"
      android:label="@string/app_name" >
      <intent-filter>
        <action android:name="android.intent.action.MAIN" /> 

        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity>
  </application> 

</manifest> 

以上就是本文的全部内容,希望对大家的学习有所帮助。

(0)

相关推荐

  • Android实现短信发送功能

    本文实例实现了两个模拟器之间短信的发送功能,分享给大家供大家参考,具体实现内容如下 1.编辑String.xml文件内容为: <?xml version="1.0″ encoding="utf-8″?> <resources> <string name="app_name">SendMesage</string> <string name="action_settings">Settin

  • android中可以通过两种方式调用接口发送短信

    第一:调用系统短信接口直接发送短信:主要代码如下: 复制代码 代码如下: //直接调用短信接口发短信 SmsManager smsManager = SmsManager.getDefault(); List<String> divideContents = smsManager.divideMessage(content); for (String text : divideContents) { smsManager.sendTextMessage("150xxxxxxxx&qu

  • Android基础开发小案例之短信发送器

    先看看效果图: 布局文件: activity_main.xml <span style="font-family:Comic Sans MS;font-size:14px;"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" androi

  • Android发送短信功能代码

    本文实例讲述了Android发送短信功能代码,是进行Android程序开发中非常常见的重要功能.分享给大家供大家参考之用.具体方法如下: // 发送短信 public void sendMsg(){ String content = edtSend.getText().toString(); SmsManager smsManager = SmsManager.getDefault(); List<String> divideContents = smsManager.divideMessag

  • Android短信发送器实现方法

    本文实例讲述了Android短信发送器实现方法.分享给大家供大家参考.具体如下: 这里模拟android短信发送器的实现 AndroidManifest.xml清单文件: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.ljq.

  • Android实现将已发送的短信写入短信数据库的方法

    短信是手机常见的功能,本文就以实例形式讲述了Android实现将已发送的短信写入短信数据库的方法.分享给大家供大家参考之用.具体如下: 一般来说,把短信发送出去以后,需要把已发送的短信写入短信数据库.短信数据库有多个Uri,其中已发送的Uri是content://sms/sent. 具体功能代码如下: // 把短信写入数据库 public void writeMsg(){ try{ ContentValues values = new ContentValues(); // 发送时间 value

  • Android编程实现读取手机联系人、拨号、发送短信及长按菜单操作方法实例小结

    本文实例讲述了Android编程实现读取手机联系人.拨号.发送短信及长按菜单操作方法.分享给大家供大家参考,具体如下: 1.Andrid项目结构图↓主要操作图中红色方框内的文件. 2.首先布局代码如下 a, main.xml 程序运行的主界面,主要用ListView列表控件展示手机联系人 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://s

  • Android实现发送短信功能实例详解

    本文实例分析了Android实现发送短信功能的方法.分享给大家供大家参考,具体如下: 短信和打电话一样,都是android手机的基本功能,下面以实例说明android如何实现发送短信的功能. 程序如下所示: import java.util.regex.Matcher; import java.util.regex.Pattern; import android.app.Activity; import android.app.PendingIntent; import android.cont

  • Android Mms之:短信发送流程(图文详解)

    信息的发送,对于Mms应用程序来讲主要就是在信息数据库中创建并维护一条信息记录,真正的发送过程交由底层(Frameworks层)函数来处理. 总体的来讲,当信息创建完成后,对于信息通常有三个去处,一个是放弃这个信息,也就是用户不想要此信息,一旦选择,信息将不会被保存:第二个去处就是保存为草稿:最后一个去处就是发送此信息. 当点击了发送后,UI层暂不会有变化,UI层要监听负责发送的各个类的回调信息和数据库的变化信息来更新UI.信息发送的第一站是WorkingMessage,它会先处理一下信息的相关

  • Android实现短信加密功能(发送加密短信、解密本地短信)

    短信加密此类功能由于新手学习的需求量较小,所以在网上很少有一些简单的demo供新手参考.小编做到此处也是花了比较多的时间自我构思,具体的过程也是不过多描述了,讲一下demo的内容. demo功能: 1.可以发送短信并且加密(通过改变string中的char) 2.能够查看手机中的短信 3.能够给收到的加密短信解密. 涉及到的知识点: 1.intent bundle传递 2.ContentResolver获取手机短信 3.listveiw与simpleAdapter 4.发送短信以及为发送短信设置

随机推荐