如何通过安卓系统接收并处理短信?
在Android系统中获取短信,可以通过使用Content Provider来访问手机中的短信数据库,下面将详细介绍如何实现这一功能:
一、准备工作
1、添加权限:在AndroidManifest.xml文件中添加读取短信的权限。
<uses-permission android:name="android.permission.READ_SMS"/>
2、创建广播接收器:用于监听系统发出的短信广播。
public class SmsReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Bundle bundle = intent.getExtras(); if (bundle != null) { Object[] pdus = (Object[]) bundle.get("pdus"); for (int i = 0; i < pdus.length; i++) { SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdus[i]); String sender = smsMessage.getOriginatingAddress(); String messageBody = smsMessage.getMessageBody(); // 处理短信内容 } } } }
3、注册广播接收器:在AndroidManifest.xml中注册广播接收器。
<receiver android:name=".SmsReceiver"> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED"/> </intent-filter> </receiver>
二、获取所有短信记录
1、定义短信URI提供程序的URI有多种,可以根据需要选择不同的URI来获取不同类型的短信。
final String SMS_URI_ALL = "content://sms/"; // 所有短信 final String SMS_URI_INBOX = "content://sms/inbox"; // 收件箱 final String SMS_URI_SENT = "content://sms/sent"; // 已发送 final String SMS_URI_DRAFT = "content://sms/draft"; // 草稿 final String SMS_URI_OUTBOX = "content://sms/outbox"; // 发件箱 final String SMS_URI_FAILED = "content://sms/failed"; // 发送失败 final String SMS_URI_QUEUED = "content://sms/queued"; // 待发送列表
2、查询短信记录:通过ContentResolver查询短信记录,并遍历Cursor以获取每条短信的信息。
public String getAllSms() { final String SMS_URI_ALL = "content://sms/"; String sms = ""; Uri uri = Uri.parse(SMS_URI_ALL); String[] projection = new String[]{"_id", "address", "person", "body", "date", "type"}; Cursor cur = getContentResolver().query(uri, projection, null, null, "date desc"); if (cur.moveToFirst()) { do { long dateInMillis = cur.getLong(cur.getColumnIndex("date")); String smsbody = cur.getString(cur.getColumnIndexOrThrow("body")); String address = cur.getString(cur.getColumnIndexOrThrow("address")); // 根据需要处理短信内容 } while (cur.moveToNext()); } return sms; }
三、实时监听短信变化
1、使用ContentObserver:当短信数据库发生变化时,ContentObserver的onChange方***被调用,从而读取最新的短信。
public class SmsContentObserver extends ContentObserver { public SmsContentObserver(Handler handler) { super(handler); } @Override public void onChange(boolean selfChange) { super.onChange(selfChange); // 处理短信变化逻辑 } }
2、注册ContentObserver:在Activity或Service中注册ContentObserver。
getContentResolver().registerContentObserver(Uri.parse("content://sms"), true, new SmsContentObserver(new Handler()));
四、单元表格
字段名 | 描述 |
_id | 一个自增字段,从1开始 |
thread_id | 同一发信人的ID相同 |
address | 发件人手机号码 |
person | 联系人列表里的序号,陌生人为null |
date | 发件日期 |
protocol | 协议类型(SMS_PROTO=0, MMS_PROTO=1) |
read | 是否阅读(0未读,1已读) |
status | 状态(-1接收,0完成,64待处理,128失败) |
type | 消息类型(ALL=0, INBOX=1, SENT=2, DRAFT=3, OUTBOX=4, FAILED=5, QUEUED=6) |
body | 短信内容 |
service_center | 短信服务中心号码编号 |
subject | 短信主题 |
reply_path_present | TP-Reply-Path |
locked |
五、相关问题与解答
1、问题1:如何在Android应用中获取所有短信记录?
答:要在Android应用中获取所有短信记录,可以使用ContentResolver来查询短信内容提供程序的URI,具体步骤如下:
在AndroidManifest.xml中添加读取短信的权限。
使用ContentResolver查询短信记录,并通过Cursor遍历获取每条短信的信息。
根据需要处理短信内容。
2、问题2:如何实时监听短信的变化?
答:要实时监听短信的变化,可以使用ContentObserver来观察短信数据库的变化,具体步骤如下:
创建一个继承自ContentObserver的类,重写onChange方法。
在Activity或Service中注册ContentObserver,监听短信内容的URI。
当短信数据库发生变化时,ContentObserver的onChange方***被调用,从而读取最新的短信。
以上内容就是解答有关“安卓系统获取短信”的详细内容了,我相信这篇文章可以为您解决一些疑惑,有任何问题欢迎留言反馈,谢谢阅读。