Android编程实现短信收发及语音播报提示功能示例

本文实例讲述了Android编程实现短信收发及语音播报提示功能。分享给大家供大家参考,具体如下:

发送短信功能界面

/**
 * 发送短信Demo
 *
 * @description:
 * @author ldm
 * @date 2016-4-22 上午9:07:53
 */
public class SmsActivity extends Activity implements OnClickListener {
  public static final String SMS_RECIPIENT_EXTRA = "com.ldm.study.SMS_RECIPIENT";
  public static final String ACTION_SMS_SENT = "com.ldm.study.SMS_SENT_ACTION";
  private Button sms_send_message;
  private EditText sms_recipient;
  private EditText sms_content;
  private CheckBox sms_enable_receiver;
  private TextView sms_status;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.send_sms_layout);
    initViews();
    initListeners();
    registerSmsReceiver();
  }
  /**
   * 注册短信监听广播
   *
   * @description:
   * @author ldm
   * @date 2016-4-22 上午9:23:23
   */
  private void registerSmsReceiver() {
    registerReceiver(new BroadcastReceiver() {
      @Override
      public void onReceive(Context context, Intent intent) {
        String message = null;
        boolean error = true;
        switch (getResultCode()) {
        case Activity.RESULT_OK:
          message = "发送成功!";
          error = false;
          break;
        case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
          message = "发送失败";
          break;
        case SmsManager.RESULT_ERROR_NO_SERVICE:
          message = "发送失败";
          break;
        case SmsManager.RESULT_ERROR_NULL_PDU:
          message = "发送失败";
          break;
        case SmsManager.RESULT_ERROR_RADIO_OFF:
          message = "发送失败";
          break;
        }
        sms_recipient.setEnabled(true);
        sms_content.setEnabled(true);
        sms_content.setText("");
        sms_status.setText(message);
        sms_status.setTextColor(error ? Color.RED : Color.GREEN);
      }
    }, new IntentFilter(ACTION_SMS_SENT));
  }
  /**
   * 监听事件
   *
   * @description:
   * @author ldm
   * @date 2016-4-22 上午9:24:20
   */
  private void initListeners() {
    sms_send_message.setOnClickListener(this);
    // 应用Package管理器
    final PackageManager pm = this.getPackageManager();
    // 获取到应用中指定的组件
    final ComponentName componentName = new ComponentName("com.ldm.study",
        "com.ldm.study.receiver.SmsMessageReceiver");
    // 根据组件是否可用的状态来判断sms_enable_receiver的选中状态
    sms_enable_receiver
        .setChecked(pm.getComponentEnabledSetting(componentName) == PackageManager.COMPONENT_ENABLED_STATE_ENABLED);
    // 监听sms_enable_receiver设置广播组件是否可用
    sms_enable_receiver
        .setOnCheckedChangeListener(new OnCheckedChangeListener() {
          public void onCheckedChanged(CompoundButton buttonView,
              boolean isChecked) {
            // 组件状态设置
            pm.setComponentEnabledSetting(
                componentName,
                isChecked ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
                    : PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                PackageManager.DONT_KILL_APP);
          }
        });
  }
  private void initViews() {
    sms_recipient = (EditText) (findViewById(R.id.sms_recipient));
    sms_content = ((EditText) findViewById(R.id.sms_content));
    // 是否打开短信广播接收开关
    sms_enable_receiver = (CheckBox) findViewById(R.id.sms_enable_receiver);
    sms_send_message = (Button) findViewById(R.id.sms_send_message);
    sms_status = (TextView) findViewById(R.id.sms_status);
    if (getIntent().hasExtra(SMS_RECIPIENT_EXTRA)) {
      sms_recipient.setText(getIntent().getExtras().getString(
          SMS_RECIPIENT_EXTRA));
      sms_content.requestFocus();
    }
  }
  @Override
  public void onClick(View v) {
    if (v.getId() == R.id.sms_send_message) {
      sendSms();
    }
  }
  /**
   * 发送短信
   *
   * @description:
   * @author ldm
   * @date 2016-4-22 上午9:30:38
   */
  private void sendSms() {
    if (TextUtils.isEmpty(sms_recipient.getText())) {
      Toast.makeText(SmsActivity.this, "请输入短信接收者", Toast.LENGTH_SHORT)
          .show();
      return;
    }
    if (TextUtils.isEmpty(sms_content.getText())) {
      Toast.makeText(SmsActivity.this, "请输入短信内容", Toast.LENGTH_SHORT)
          .show();
      return;
    }
    sms_recipient.setEnabled(false);
    sms_content.setEnabled(false);
    SmsManager sms = SmsManager.getDefault();
    List<String> messages = sms.divideMessage(sms_recipient.getText()
        .toString());
    String recipient = sms_content.getText().toString();
    for (String message : messages) {
      // 发送短信
      sms.sendTextMessage(recipient, null, message, PendingIntent
          .getBroadcast(SmsActivity.this, 0, new Intent(
              ACTION_SMS_SENT), 0), null);
    }
  }
}

收到短信后处理界面:

/**
 * 接收短信语音播报
 *
 * @description:
 * @author ldm
 * @date 2016-4-22 上午9:34:21
 */
public class SmsReceivedActivity extends Activity implements OnInitListener {
  private static final int DIALOG_SHOW_MESSAGE = 1;
  public static final String SMS_FROM_ADDRESS_EXTRA = "com.ldm.study.SMS_FROM_ADDRESS";
  public static final String SMS_FROM_DISPLAY_NAME_EXTRA = "com.ldm.study.SMS_FROM_DISPLAY_NAME";
  public static final String SMS_MESSAGE_EXTRA = "com.ldm.study.SMS_MESSAGE";
  private TextToSpeech mTts;
  private String mFromDisplayName;
  private String mFromAddress;
  private String mMessage;
  private String mFullBodyString;
  @SuppressWarnings("deprecation")
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // 短信来电号码
    mFromAddress = getIntent().getExtras()
        .getString(SMS_FROM_ADDRESS_EXTRA);
    // 来电人称呼
    mFromDisplayName = getIntent().getExtras().getString(
        SMS_FROM_DISPLAY_NAME_EXTRA);
    mMessage = getIntent().getExtras().getString(SMS_MESSAGE_EXTRA);
    // 短信内容
    mFullBodyString = String.format(getString(R.string.sms_format),
        mFromDisplayName, mMessage);
    showDialog(DIALOG_SHOW_MESSAGE);
    //初始化TTS
    mTts = new TextToSpeech(this, this);
  }
  /**
   * 初始化TTS服务
   */
  @SuppressWarnings("deprecation")
  public void onInit(int status) {
    if (status == TextToSpeech.SUCCESS) {// 成功状态
      // 设置语言,TTS引擎支持 English、 French 、 German 、 Italian 和 Spanish 这5大语言
      int result = mTts.setLanguage(Locale.ENGLISH);
      if (result == TextToSpeech.LANG_MISSING_DATA
          || result == TextToSpeech.LANG_NOT_SUPPORTED) {
        Toast.makeText(this, "TTS不可用", Toast.LENGTH_LONG).show();
      } else {
        mTts.speak(mFullBodyString, TextToSpeech.QUEUE_ADD, null);
        // mTts.speak(mFullBodyString, TextToSpeech.QUEUE_ADD, null,
        // "");
      }
    } else {
      Toast.makeText(this, "TTS初始化失败", Toast.LENGTH_LONG).show();
    }
  }
  @Override
  protected Dialog onCreateDialog(int id) {
    switch (id) {
    case DIALOG_SHOW_MESSAGE:
      return new AlertDialog.Builder(this)
          .setIcon(android.R.drawable.ic_dialog_email)
          .setTitle("Message Received")
          .setMessage(mFullBodyString)
          .setPositiveButton("回复",
              new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog,
                    int whichButton) {
                  // 回复短信则跳转到发送短信界面,把接收人信息带过去
                  Intent i = new Intent();
                  i.setClass(SmsReceivedActivity.this,
                      SmsActivity.class);
                  i.putExtra(SmsActivity.SMS_RECIPIENT_EXTRA,
                      mFromAddress);
                  startActivity(i);
                  dialog.dismiss();
                  finish();
                }
              })
          .setNegativeButton("取消",
              new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog,
                    int whichButton) {
                  dialog.dismiss();
                  finish();
                }
              }).create();
    }
    return null;
  }
}

短信广播

/**
 * 短信来信监听广播
 *
 * @description:
 * @author ldm
 * @date 2016-4-22 上午10:07:49
 */
public class MyMsmReceiver extends BroadcastReceiver {
  @Override
  public void onReceive(Context context, Intent intent) {
    Bundle extras = intent.getExtras();
    if (extras == null)
      return;
    // 收到的短信内容
    Object[] pdus = (Object[]) extras.get("pdus");
    for (int i = 0; i < pdus.length; i++) {
      SmsMessage message = SmsMessage.createFromPdu((byte[]) pdus[i]);
      String fromAddress = message.getOriginatingAddress();
      String fromDisplayName = fromAddress;
      Uri uri;
      String[] projection;
      uri = Uri.withAppendedPath(
          ContactsContract.PhoneLookup.CONTENT_FILTER_URI,
          Uri.encode(fromAddress));
      projection = new String[] { ContactsContract.PhoneLookup.DISPLAY_NAME };
      // 查询短信的发件人
      Cursor cursor = context.getContentResolver().query(uri, projection,
          null, null, null);
      if (cursor != null) {
        if (cursor.moveToFirst())
          fromDisplayName = cursor.getString(0);
        cursor.close();
      }
      // 跳转到短信接收界面
      Intent di = new Intent();
      di.setClass(context, SmsReceivedActivity.class);
      di.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
          | Intent.FLAG_ACTIVITY_SINGLE_TOP);
      di.putExtra(SmsReceivedActivity.SMS_FROM_ADDRESS_EXTRA, fromAddress);
      di.putExtra(SmsReceivedActivity.SMS_FROM_DISPLAY_NAME_EXTRA,
          fromDisplayName);
      di.putExtra(SmsReceivedActivity.SMS_MESSAGE_EXTRA, message
          .getMessageBody().toString());
      context.startActivity(di);
    }
  }
}

附:DEMO示例代码点击此处本站下载

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android短信与电话操作技巧汇总》、《Android文件操作技巧汇总》、《Android操作json格式数据技巧总结》、《Android编程之activity操作技巧总结》、《Android开发入门与进阶教程》、《Android资源操作技巧汇总》、《Android视图View技巧总结》及《Android控件用法总结》

希望本文所述对大家Android程序设计有所帮助。

(0)

相关推荐

  • Android发送短信功能代码

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

  • Android实现自动提取短信验证码功能

    本文实例讲解了Android自动提取短信验证码解决方案,分享给大家供大家参考,具体内容如下 主要功能及优点 1.收到验证码短信后,自动提取短信中的验证码填写到相应输入框 2.可指定一个号码,只读取与他有关短信,避免提取来源错误 3.利用正则表达式,可匹配各种类型验证码 模块集成关键步骤     将auto_getcode_demo中src包里的SMSContentObserver类复制到你的项目src包中 在SMSContentObserver中:    修改正则表达式内容来匹配自己想要获取的字

  • Android获取和读取短信验证码的实现方法

    现如今,验证码在Android的客户端还是非常普遍的.通过手机账号和验证码直接去注册应用账户的信息.很多应用都以这种方式来完成注册.简单的介绍一下吧. Android获取短信验证码还是比较简单的,通过Mob官网提供的ShareSDK,调用其中内部的方法,就可以获取到短信的验证码了.提供一下Mob的官网地址.http://www.mob.com/#/在官网上注册相关的信息之后,下载相关的jar包和.so文件就可以实现获取短信验证码了(2.0之前的版本都需要下载jar包和 .so文件,而现在的2.2

  • android短信监听工具(示例代码)

    在学习本实例之前,读者请先了解一下android四大组件中的"广播接收者"的基本概念和使用. 由于是"监听程序",所以就不需要建立Activity.这样也算是一种"遮掩"吧.使用BroadcastReceiver,就能达到这"不可告人"的目的.呵呵.当然,使用服务来开发此类应用,更加合适.这里就不再深入讨论"服务"了.本实例仅供学习参考,请勿非法用途. 复制代码 代码如下: package cn.itcas

  • 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基于讯飞语音SDK实现语音识别

    一.准备工作 1.你需要android手机应用开发基础 2.科大讯飞语音识别SDK android版 3.科大讯飞语音识别开发API文档 4.android手机 关于科大讯飞SDK及API文档,请到科大语音官网下载:http://www.xfyun.cn/ 当然SDK和API有多个版本可选,按照你的需要下载,其次,下载需要填写资料申请注册,申请通过或可获得Appid 如下图,申请一个APPID,就可以了. 二.语音识别流程 1.创建识别控件 函数原型 Public RecognizerDialo

  • Android实现获取未接来电和未读短信数量的方法

    本文实例展示了Android实现获取未接来电和未读短信数量的方法,在Android程序开发中非常常见,是非常实用的功能,现分享给大家供大家参考.具体如下: 一.未读短信   首先注册Observer,当有新短信或彩信来的时候会调用 onChange方法,我们可以在onChange方法中去获取未读短信和彩信,然后做一些UI上的处理! 具体功能代码如下: private ContentObserver newMmsContentObserver = new ContentObserver(new H

  • Android仿微信语音聊天功能

    本文实例讲述了Android仿微信语音聊天功能代码.分享给大家供大家参考.具体如下: 项目效果如下: 具体代码如下: AudioManager.java package com.xuliugen.weichat; import java.io.File; import java.io.IOException; import java.util.UUID; import android.media.MediaRecorder; public class AudioManager { private

  • Android短信接收监听、自动回复短信操作例子

    定义广播接收器的Action: 复制代码 代码如下: private static final String TAG ="SmsService";/*** 信息发送状态广播*/private static final String ACTION_SMS_SEND  = "com.SmsService.send";  /*** 信息接收状态广播*/private static final String ACTION_SMS_DELIVERY = "com.S

  • Android实现短信验证码自动填写功能

    本实例为大家分享了Android实现短信验证码自动填写功能,供大家参考,具体内容如下 实现思路很简单: 1.在需要输入验证码的Activity代码注册监听短信的广播 2.拦截短信,获取其中的验证码 3.回写到EditText private SmsReciver smsReciver = new SmsReciver(); /** 收到短信Action **/ String ACTION_SMS_RECIVER = "android.provider.Telephony.SMS_RECEIVED

  • 获取Android手机中所有短信的实现代码

    Java核心代码: public String getSmsInPhone() { final String SMS_URI_ALL = "content://sms/"; final String SMS_URI_INBOX = "content://sms/inbox"; final String SMS_URI_SEND = "content://sms/sent"; final String SMS_URI_DRAFT = "c

随机推荐