在Android系统中获取短信内容可以通过多种方式实现,下面将详细介绍如何通过ContentResolver和ContentObserver来获取短信内容。

一、准备工作
1、添加权限:在AndroidManifest.xml文件中添加读取短信的权限。
<uses-permission android:name="android.permission.READ_SMS" />
2、定义短信URI:短信的URI主要有以下几种:
content://***s/inbox: 收件箱
content://***s/sent: 已发送
content://***s/draft: 草稿
content://***s/outbox: 发件箱
content://***s/failed: 发送失败
content://***s/queued: 待发送列表
content://***s/: 所有短信
二、使用ContentResolver读取短信
1、查询短信数据库:
private void obtainPhoneMessage() {
ContentResolver cr = getContentResolver();
String[] projection = new String[]{"_id", "address", "person", "body", "date", "type"};
Cursor cur = cr.query(Uri.parse("content://sms/"), projection, null, null, "date desc");
if (cur != null) {
while (cur.moveToNext()) {
String number = cur.getString(cur.getColumnIndex("address")); // 手机号
String name = cur.getString(cur.getColumnIndex("person")); // 联系人姓名
String body = cur.getString(cur.getColumnIndex("body")); // 短信内容
// 处理短信数据...
}
cur.close();
} else {
Log.i("ooc", "************cur == null");
}
}
2、字段说明:
_id: 短信序号

thread_id: 对话的序号
address: 发件人地址,即手机号
person: 发件人,如果发件人在通讯录中则为具体姓名,陌生人为null
date: 日期,long型
protocol: 协议(0表示***S,1表示MMS)
read: 是否阅读(0未读,1已读)
status: 短信状态(-1接收,0完成,64待处理,128失败)
type: 短信类型(1是接收到的,2是已发出)
body: 短信具体内容
service_center: 短信服务中心号码编号,如+8613800755500
1、广播接收器:
当手机收到一条短信时系统会发送一条广播:"android.provider.Telephony.***S_RECEIVED",通过该广播可以获取到短信内容。
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 (Object pdu : pdus) {
SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdu);
String sender = smsMessage.getDisplayOriginatingAddress();
String message = smsMessage.getDisplayMessageBody();
// 处理短信数据...
}
}
}
}
2、注册广播接收器:

IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
registerReceiver(new SmsReceiver(), filter);
3、ContentObserver:
当短信数据库发生变化时,ContentObserver中的onChange方***被调用。
public class SmsContentObserver extends ContentObserver {
public SmsContentObserver(Handler handler) {
super(handler);
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
// 查询最新的短信记录...
}
}
4、注册ContentObserver:
getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, new SmsContentObserver(new Handler()));
四、相关问题与解答
1、问题1:如何在AndroidManifest.xml中添加读取短信的权限?
答案:在AndroidManifest.xml文件的<manifest>标签下添加以下代码:
<uses-permission android:name="android.permission.READ_SMS" />
2、问题2:如何实时监听并获取新收到的短信内容?
答案:可以通过两种方法实现:
方法一:使用广播接收器:当手机收到一条短信时系统会发送一条广播:"android.provider.Telephony.***S_RECEIVED",通过该广播可以获取到短信内容。
方法二:使用ContentObserver:当短信数据库发生变化时,ContentObserver中的onChange方***被调用,从而读取最新短信。
获取Android手机中的短信内容可以通过ContentResolver直接读取短信数据库,也可以通过广播接收器或ContentObserver实时监听短信的变化,这些方法各有优缺点,开发者可以根据具体需求选择合适的方案。
到此,以上就是小编对于“安卓获取短信内容”的问题就介绍到这了,希望介绍的几点解答对大家有用,有任何问题和不懂的,欢迎各位朋友在评论区讨论,给我留言。