最近项目需求需要发送短信和接收验证码并将验证码显示在输入框中 以下是我的记录

前提---权限

<uses-permission android:name="android.permission.SEND_SMS"></uses-permission>
<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
<uses-permission android:name="android.permission.READ_SMS"></uses-permission>

1,发送短信并提示是否发送成功以及对方是否接收

package com.javen.utils;import java.util.ArrayList;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.telephony.SmsManager;
import android.widget.Toast;/*** @author Javen**/
public class SendMessageUtil {/** 发送与接收的广播 **/private static String SENT_SMS_ACTION = "SENT_SMS_ACTION";private static String DELIVERED_SMS_ACTION = "DELIVERED_SMS_ACTION";/*** 实现发送短信* @param context * @param text 短信的内容* @param phoneNumber 手机号码*/public static void sendMessage(Context context, String text,String phoneNumber) {context.registerReceiver(sendMessage, new IntentFilter(SENT_SMS_ACTION));context.registerReceiver(receiver, new IntentFilter(DELIVERED_SMS_ACTION));// create the sentIntent parameter  Intent sentIntent = new Intent(SENT_SMS_ACTION);  PendingIntent sentPI = PendingIntent.getBroadcast(context, 0, sentIntent,0);// create the deilverIntent parameter  Intent deliverIntent = new Intent(DELIVERED_SMS_ACTION);  PendingIntent deliverPI = PendingIntent.getBroadcast(context, 0,deliverIntent, 0); SmsManager smsManager = SmsManager.getDefault();//如果字数超过5,需拆分成多条短信发送if (text.length() > 70 ) {ArrayList<String> msgs = smsManager.divideMessage(text);for (String msg : msgs) {smsManager.sendTextMessage(phoneNumber, null, msg, sentPI, deliverPI);                        }} else {smsManager.sendTextMessage(phoneNumber, null, text, sentPI, deliverPI);}}private static BroadcastReceiver sendMessage = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {// 判断短信是否发送成功switch (getResultCode()) {case Activity.RESULT_OK:Toast.makeText(context, "短信发送成功", Toast.LENGTH_SHORT).show();break;default:Toast.makeText(context, "发送失败", Toast.LENGTH_LONG).show();break;}}};private static BroadcastReceiver receiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {// 表示对方成功收到短信Toast.makeText(context, "对方接收成功", Toast.LENGTH_LONG).show();}};
}

2通过短信数据库获取短信内容

package com.example.message;import java.util.regex.Matcher;
import java.util.regex.Pattern;import android.app.Activity;
import android.content.ContentResolver;
import android.content.Context;
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.widget.Toast;public class MainActivity extends Activity {private SmsObserver smsObserver;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);smsObserver = new SmsObserver(this, smsHandler);getContentResolver().registerContentObserver(SMS_INBOX, true,smsObserver);}public Handler smsHandler = new Handler() {// 这里可以进行回调的操作// TODOpublic void handleMessage(android.os.Message msg) {System.out.println("smsHandler 执行了.....");};};private Uri SMS_INBOX = Uri.parse("content://sms/");public void getSmsFromPhone() {ContentResolver cr = getContentResolver();String[] projection = new String[] { "body","address","person"};// "_id", "address",// "person",, "date",// "typeString where = " date >  "+ (System.currentTimeMillis() - 10 * 60 * 1000);Cursor cur = cr.query(SMS_INBOX, projection, where, null, "date desc");if (null == cur)return;if (cur.moveToNext()) {String number = cur.getString(cur.getColumnIndex("address"));// 手机号String name = cur.getString(cur.getColumnIndex("person"));// 联系人姓名列表String body = cur.getString(cur.getColumnIndex("body"));System.out.println(">>>>>>>>>>>>>>>>手机号:" + number);System.out.println(">>>>>>>>>>>>>>>>联系人姓名列表:" + name);System.out.println(">>>>>>>>>>>>>>>>短信的内容:" + body);// 这里我是要获取自己短信服务号码中的验证码~~Pattern pattern = Pattern.compile("[a-zA-Z0-9]{5}");Matcher matcher = pattern.matcher(body);//String body="测试验证码2346ds";if (matcher.find()) {String res = matcher.group().substring(0, 5);// 获取短信的内容showToast(res);System.out.println(res);}}}protected void showToast(String text) {Toast.makeText(MainActivity.this, text, Toast.LENGTH_LONG).show();}class SmsObserver extends ContentObserver {public SmsObserver(Context context, Handler handler) {super(handler);}@Overridepublic void onChange(boolean selfChange) {super.onChange(selfChange);// 每当有新短信到来时,使用我们获取短消息的方法getSmsFromPhone();}}
}

sms主要结构:  
  
  _id:短信序号,如100
  
  thread_id:对话的序号,如100,与同一个手机号互发的短信,其序号是相同的
  
  address:发件人地址,即手机号,如+86138138000
  
  person:发件人,如果发件人在通讯录中则为具体姓名,陌生人为null
  
  date:日期,long型,如1346988516,可以对日期显示格式进行设置
  
  protocol:协议0SMS_RPOTO短信,1MMS_PROTO彩信
  
  read:是否阅读0未读,1已读
  
  status:短信状态-1接收,0complete,64pending,128failed
  
  type:短信类型1是接收到的,2是已发出
  
  body:短信具体内容
  
  service_center:短信服务中心号码编号,如+8613800755500

短信数据库分析

表结构分析:

address:短信发送者电话号码

person:联系人编号,如果电话薄里有联系人则显示编号,没有联系人则显示null

read:读取状态,0为未读,1为已读

body:短信内容

thread表:线程表

dataL:日期

message_count:短信发送的条数

snippet:最后一条短信内容

read:短信读取状态

转自:http://www.cnblogs.com/zyw-205520/p/3835369.html

另参考博客:http://www.mamicode.com/info-detail-517002.html

android之利用SQLite数据库实现登陆和注册:

http://www.cnblogs.com/greatverve/archive/2011/12/27/2301601.html

Android之发送短信和接收验证码相关推荐

  1. android之发送短信的方法研究

    android中可以通过两种方式发送短信 第一:调起系统发短信功能:主要代码如下: Uri uri = Uri.parse("smsto:10010"); Intent it = ...

  2. Android之发送短信的两种方式

    SMS涉及的主要类SmsManager 实现SMS主要用到SmsManager类,该类继承自java.lang.Object类,下面我们介绍一下该类的主要成员. 公有方法: ArrayList< ...

  3. Android应用发送短信的实现

    实现Android应用的发送消息 实现两个安卓机之间发送短消息: 新建一个Android项目: 在MainActivity中添加一个EditText,id=et_content,用来输入想要发送的短信 ...

  4. android将发送短信写入发件箱

    最近写了一个应用批量发送短信,但是在发件箱里却看不到发送的内容 于是找了一个方法将发送的短信写入发件箱: 代码如下,可供参考: try{ContentValues values = new Conte ...

  5. Android之发送短信后按钮(60秒)变灰色每隔一秒递减显示

    无论是做PC端还是android端,每次注册都有发送短信之后,60秒每隔一秒递减显示,如下图 这个地方需要注意的是按钮变灰色之后不能再点击,然后就是android更新UI,需要用handle,或者其它 ...

  6. Android 手机发送短信

    参照网上的例子,做了一个手机发送短信的app. 有两种发送方法:第一种方法测试没有信息的发送记录,第二种调用的sms的Activity还要自行操作. 首先是xml布局文件代码: <LinearL ...

  7. Android 中发送短信

    import android.net.Uri;//调用Android系统API发送短信 Uri uri = Uri.parse("smsto:" + strSmsPhone_val ...

  8. android实现发送短信的功能

    在上次的博客中已经实现了拨打电话的功能,但是在实际中使用短信的几率也是比较大的,好多手机卡短信都是包月的,像移动校园卡每个月可以发200条短信,超出之后才付钱.但这些日子已经一去不复返了,我也毕业了, ...

  9. Android - 批量发送短信的实现方式

    做了一个简单的批量发短信小工具.功能:从 sdcard 中读取发送短信的手机列表,每行一个手机号(存在/sdcard/ADAGroupSMS/PhoneNum.txt),批量发送短信.适用于广告推广. ...

最新文章

  1. iOS将文件在自己App中打开
  2. python安装后在哪里找_python安装后的目录在哪里
  3. 如何在Java JVM中处理图像和视频
  4. deepin应用分发_Deepin Dock隐藏功能等功能说明
  5. RFC:Request For Comments
  6. GoogLeNet模型
  7. 使用Gitbook来编写你的Api文档
  8. UVA 10791 Minimum Sum LCM 数论
  9. BXP3.0安装指南(传统方法)(转)
  10. python源代码文件加密
  11. excel合并多个工作表_如何批量合并Excel文件和工作表 - Excel合并器使用教程
  12. 论文解读笔记:基于深度学习的行为分析综述
  13. 转载:王垠·程序员的心理疾病
  14. 计算机网络手写笔记图片,一键收藏!清华学子这样记笔记!
  15. window java 一键启动部署 mysql,jar
  16. IKBC_DC-108 改装,加灯,加锂电池和充电
  17. 图像的形态学处理总结
  18. 阿里云磁盘异常爆满的原因及解决方法
  19. Python @property 详解
  20. String转QString,线段相交,四点共面,git相关操作,截图,扩展工具,string乱码,矩阵相乘

热门文章

  1. 四川麻将AI接口说明
  2. 大轴纸怎么上机器人_纸巾机器人到底怎么操作,如何领取
  3. 消息队列rabbitmq(二)windows系统erl和rabbitmq的安装
  4. stm32F103C8T6基于FreeRTOS操作系统的多任务
  5. 【UVA11825】Hackers' Crackdown
  6. 自动驾驶数据闭环,要么被高估了,要么被低估了?
  7. 在 drawable 资源中使用属性引用的兼容问题
  8. 心电信号采集原理及电路设计
  9. 如果北京是一个产品,有哪些用户体验不好的地方?
  10. CSS3之渐变(1)