如何在安卓设备上获取短信内容?
在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实时监听短信的变化,这些方法各有优缺点,开发者可以根据具体需求选择合适的方案。
到此,以上就是小编对于“安卓获取短信内容”的问题就介绍到这了,希望介绍的几点解答对大家有用,有任何问题和不懂的,欢迎各位朋友在评论区讨论,给我留言。