一、 android sms所要的权限
Java代码
1.<uses-permission android:name="android.permission.READ_SMS" />
2.<uses-permission android:name="android.permission.RECEIVE_SMS" />
二、 sms发送
与短消息发送相关的类为:SmsManager.
Java代码
1.SmsManager.sendTextMessage(destinationAddress, scAddress, text, sentIntent, deliveryIntent);
参数说明:
destinationAddress the address to send the message to
scAddress is the service center address or null to use the current default SMSC
text the body of the message to send
sentIntent if not NULL this PendingIntent is broadcast when the message is sucessfully sent, or failed. The result code will be Activity.RESULT_OK for success, or one of these errors: RESULT_ERROR_GENERIC_FAILURE RESULT_ERROR_RADIO_OFF RESULT_ERROR_NULL_PDU. The per-application based SMS control checks sentIntent. If sentIntent is NULL the caller will be checked against all unknown applications, which cause smaller number of SMS to be sent in checking period.
deliveryIntent if not NULL this PendingIntent is broadcast when the message is delivered to the recipient. The raw pdu of the status report is in the extended data ("pdu").
其中两个PendingIntent模式为:
Java代码
1.PendingIntent sentIntent = PendingIntent.getBroadcast(this, 0, new Intent("SMS_SENT"), 0);
2.Intent deliveryIntent = PendingIntent.getBroadcast(this, 0, new Intent("SMS_DELIVERED"), 0);
PendingIntent sentIntent = PendingIntent.getBroadcast(this, 0, new Intent("SMS_SENT"), 0);
PendingIntent deliveryIntent = PendingIntent.getBroadcast(this, 0, new Intent("SMS_DELIVERED"), 0);
并注册接收器,根据getResultCode()来判断:
Java代码
1.registerReceiver(sendReceiver);
2.registerReceiver(deliveredReceiver);
三、 sms接收
根据接收时广播的android.provider.Telephony.SMS_RECEIVED的Intent.我们可以扩展一个BroadcastReceiver来接收sms.
传递的Intent包含pdus数据。相关代码如下:
Java代码
1.Bundle bundle = intent.getExtras();
2. Object[] pdus = (Object[]) bundle.get("pdus");
3. SmsMessage[] msgs = new SmsMessage[pdus.length];
4. for (int i = 0; i < pdus.length; i++) {
5. msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
6.}
四、 采用ContentObserver监控短信数据库
上面方法三中并不能对sms进行更新和删除操作,要做这些操作需要用ContentObserver来监控短信数据库的变化来进行相关操作。
1. 短信数据库的ContentUri
Java代码
1.public final static String SMS_URI_ALL = "content://sms/"; //0
2.public final static String SMS_URI_INBOX = "content://sms/inbox";//1
3.public final static String SMS_URI_SEND = "content://sms/sent";//2
4.public final static String SMS_URI_DRAFT = "content://sms/draft";//3
5.public final static String SMS_URI_OUTBOX = "content://sms/outbox";//4
6.public final static String SMS_URI_FAILED = "content://sms/failed";//5
7.public final static String SMS_URI_QUEUED = "content://sms/queued";//6
2. sms主要结构:
Java代码
1._id => 短消息序号 如100
2.thread_id => 对话的序号 如100
3.address => 发件人地址,手机号.如+8613811810000
4.person => 发件人,返回一个数字就是联系人列表里的序号,陌生人为null
5.date => 日期 long型。如1256539465022
6.protocol => 协议 0 SMS_RPOTO, 1 MMS_PROTO
7.read => 是否阅读 0未读, 1已读
8.status => 状态 -1接收,0 complete, 64 pending, 128 failed
9.type => 类型 1是接收到的,2是已发出
10.body => 短消息内容
11.service_center => 短信服务中心号码编号。如+8613800755500
3. 步骤
a. 写一个类继承ContentObserver
Java代码
1.public class SMSDBObserver extends ContentObserver
public class SMSDBObserver extends ContentObserver
重写onChange方法(里面对INBOX, SEND两个URI进行处理)
Java代码
1.public void onChange(boolean selfChange)
2. Uri smsInBox = Uri.parse(SMS_URI_INBOX);
3. Cursor c = ctx.getContentResolver().query(uriSms, null, selection, selectionArgs, sortOrder);
4. //对字段进行操作。。。
5. //ctx.getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder);
6. //ctx.getContentResolver().update(uri, values, where, selectionArgs);
7. //ctx.getContentResolver().delete(url, where, selectionArgs);
8. //ctx.getContentResolver().insert(url, values);
b. 在Activity中注册短信监控
Java代码
1. // 监控短信
2. smsObserver = new SMSDBObserver(new Handler(), this, app);
3.getContentResolver().registerContentObserver(Uri.parse(SMSDBObserver.SMS_URI_ALL), true, smsObserver);
注:
想监控已发送的,就要监控content://sms/send.
想删除时contentUri只能是content://sms/或content://sms/ conversations
分享到:
相关推荐
Android SMS 发送 接收及格式
基于android手机系统的 短信 sms 发送接收
基于android的SMS短信的接受与发送
每一部手机都具有短信接收和发送功能,下面我们通过代码来实现接收和发送短信功能。 一、接收短信 1、创建内部广播接收器类,接收系统发出的短信广播 2、从获得的内容中解析出短信发送者和短信内容 3、在...
该主题的目的是通过创建一个用于管理联系人,发送和接收SMS的应用程序,使学生熟悉Android系统。 主题 介绍 对于此项目,您将需要创建一个Android应用程序,该应用程序允许您创建联系人并通过SMS与之聊天。 这里的...
android代码,实训SMS短信的发送、接收等
小短信门Tiny SMS Gate 是一个适用于 Android 的小型(GPL 2 许可)SMS 网关。 它允许您通过手机通过常规的 HTTP 发送和接收 SMS 消息。 而已。 因此,我不得不请求您,请不要在受信任的 LAN 之外使用它。 虽然有一...
android短信操作,实现发送,接收与拦截
1、定义一个接收短信的广播:当手机接收到一条短信的时候,系统会发出一条值为android.provider.Telephony.SMS_RECEIVED 的广播,这条广播里携带着与短信相关的所有数据。 // 接收短信的广播 class ...
android permission BROADCAST SMS"> <intent filter android:priority "2147483647"> <action android:name "android provider Telephony SMS RECEIVED" > < intent...
Android 短信接收和短信发送(可以屏蔽系统短信通知)
如果要测试基于SMS的应用程序或需要任何应用程序发送和接收文本SMS / HTTPtoSMS或SMStoHTTP的内容,则可以使用此代码快速测试业务逻辑,而不必担心真正的SMS网关。 此代码将您的android手机转换为SMS网关。 这个...
简单-短信-发送者-接收者 用于发送和接收短信的简单安卓应用 这是一个基本的 android 应用程序,它允许您向(当前硬编码的)电话号码发送 SMS 消息,并且接收到的消息显示在 textView 中。
粒子群优化 Android应用程序发送和接收短信
手机短信sms接收发送 七大模块 sms android 短信管理
本文介绍了Android短信的发送和广播接收者实现短信的监听,要注意Android清单中权限的设置以及广播的注册监听实现,废话不多说,代码如下: 以下就是 Android清单的XML AndroidManifest.xml <manifest xmlns:...
通过 SMS 收到关键字“位置”后,接收者的位置将发送给 SMS 的发送者。 例如:假设有 A、B、C、D 是家人,A 已经安装了此应用程序并允许 B 和 C 访问他/她的位置。 因此,每当 B 或 C 发送包含关键字 'Location' 的...
9.1.6 发送和接收数据信息 289 9.2 SMS简介 291 9.2.1 在应用程序中使用SMS 291 9.2.2 发送SMS信息 291 9.2.3 监听SMS消息 294 9.2.4 紧急响应的SMS示例 296 9.2.5 紧急响应自动化 306 9.3 小结 314 第10章 ...
这个扩展名让你发送和recive从谷歌铬使用您的Android手机+ Set2SMS应用程序的短信 使用连接到您的网络的set2sms应用程序检测手机,并开始在浏览器上发送短信 支持语言:English
基于Android手机系统的java短信收发程序,本程序提供发送短信功能,并提醒短信接收。