Android自动读取短信功能如何实现?
- 行业动态
- 2025-03-04
- 2
在Android中,可借助BroadcastReceiver监听短信广播,再通过Bundle获取短信内容实现自动读短信。
Android自动读短信的实现方法
一、通过短信接收器(SMS Receiver)实现
1、注册短信接收器:在AndroidManifest.xml文件中添加相应权限和注册短信接收器。
2、创建短信接收器类:创建一个继承自BroadcastReceiver的类,在onReceive()方法中处理收到的短信内容。
3、获取短信内容:在onReceive()方法中,从Intent中获取短信内容和发送者号码,并进行相应处理。
4、示例代码:
AndroidManifest.xml:
<uses-permission android:name="android.permission.RECEIVE_SMS" /> <application> ... <receiver android:name=".SmsReceiver"> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver> ... </application>
SmsReceiver.java:
public class SmsReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(Telephony.Sms.Intents.SMS_RECEIVED_ACTION)) { Bundle bundle = intent.getExtras(); if (bundle != null) { Object[] pdus = (Object[]) bundle.get("pdus"); if (pdus != null) { for (Object pdu : pdus) { SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdu); String messageBody = smsMessage.getMessageBody(); String sender = smsMessage.getDisplayOriginatingAddress(); // 在这里处理收到的短信内容 } } } } } }
二、通过监听短信数据库实现
1、建立监听数据库的类:创建一个继承自ContentObserver的类,用于监听短信数据库的变化。
2、在Activity中注册:在需要使用的地方注册该监听器。
3、取消注册:在合适的地方取消注册,避免内存泄漏。
4、示例代码:
AutoGetCode.java:
public class AutoGetCode extends ContentObserver { private Cursor cursor = null; private Activity activity; private String smsContent = ""; private EditText editText = null; public AutoGetCode(Activity activity, Handler handler, EditText edittext) { super(handler); this.activity = activity; this.editText = edittext; } @Override public void onChange(boolean selfChange) { super.onChange(selfChange); // 读取收件箱中指定号码的短信 cursor = activity.managedQuery(Uri.parse("content://sms/inbox"), new String[]{"_id", "address", "read", "body"}, "address=? and read=?", new String[]{"你要截获的电话号码", "0"}, "_id desc"); if (cursor != null && cursor.getCount() > 0) { cursor.moveToFirst(); if (cursor.moveToFirst()) { String smsbody = cursor.getString(cursor.getColumnIndex("body")); String regEx = "(?<![0-9])([0-9]{6})(?![0-9])"; Pattern p = Pattern.compile(regEx); Matcher m = p.matcher(smsbody.toString()); while (m.find()) { smsContent = m.group(); editText.setText(smsContent); } } } } }
在Activity中使用:
AutoGetCode autoGetCode = new AutoGetCode(RegistCode.this, new Handler(), regist_code); this.getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, autoGetCode);
取消注册:
@Override protected void onDestroy() { super.onDestroy(); this.getContentResolver().unregisterContentObserver(autoGetCode); }
相关问题与解答
1、问题:为什么需要在AndroidManifest.xml文件中添加RECEIVE_SMS权限?
解答:RECEIVE_SMS权限允许应用程序接收短信广播,以便能够监听和读取收到的短信内容,这是实现自动读取短信功能的必要条件之一。
2、问题:如何确保在应用被放入后台或屏幕锁定时仍能继续监听短信?
解答:可以通过启动一个Service来实现锁屏监听,在Service中注册短信接收器,并在Service中处理收到的短信内容,需要在AndroidManifest.xml文件中声明FOREGROUND_SERVICE权限。