在Android设备上监听收到的短信可以通过多种方式实现,其中最常用的方法是通过接收系统的短信广播或监听短信数据库的变化,下面将详细介绍这两种方法:
1、接受系统的短信广播
:当手机收到新消息时,系统会发送一条广播,通过该广播可以获取短信内容。
优点:操作方便,适合简单的短信应用。
缺点:来信会在状态栏显示通知信息,且在某些情况下可能会被其他应用程序拦截。
代码示例:
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"); SmsMessage[] messages = new SmsMessage[pdus.length]; for (int i = 0; i < pdus.length; i++) { byte[] pdu = (byte[]) pdus[i]; messages[i] = SmsMessage.createFromPdu(pdu); } for (SmsMessage message : messages) { String content = message.getMessageBody(); // 得到短信内容 String sender = message.getOriginatingAddress(); // 得到发信息的号码 Date date = new Date(message.getTimestampMillis()); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); format.setTimeZone(TimeZone.getTimeZone("GMT+08:00")); Log.e("日志:onReceive...", "-接收短信执行了......" + content); } } } }
权限声明:需要在AndroidManifest.xml中添加以下权限:
<uses-permission android:name="android.permission.RECEIVE_SMS" /> <uses-permission android:name="android.permission.READ_SMS" />
2、监听短信数据库
:利用观察者模式监听短信数据库,当短信数据库改变时触发观察者的onChange()方法。
优点:可以监控所有短信,包括已读和未读的短信。
缺点:onChange回调可能因短信显示而被调用多次,且在某些情况下可能无法实时获取最新短信。
代码示例:
public class SmsContentObserver extends ContentObserver { public SmsContentObserver(Handler handler) { super(handler); } @Override public void onChange(boolean selfChange) { super.onChange(selfChange); Uri uri = Uri.parse("content://sms/inbox"); Cursor cursor = getContentResolver().query(uri, null, null, null, null); while (cursor.moveToNext()) { String address = cursor.getString(cursor.getColumnIndex("address")); String body = cursor.getString(cursor.getColumnIndexOrThrow("body")); Log.e("日志:onChange...", "-接收短信执行了......" + body); } cursor.close(); } }
注册观察者:在Activity或Service中注册观察者:
ContentResolver contentResolver = getContentResolver(); SmsContentObserver observer = new SmsContentObserver(new Handler()); contentResolver.registerContentObserver(Uri.parse("content://sms"), true, observer);
权限声明:同样需要在AndroidManifest.xml中添加相关权限。
以下是关于上述两种方法的相关问题与解答:
1、问:如何确保在锁屏状态下也能监听到短信?
答:可以在AndroidManifest.xml中声明一个前台服务,并在服务中监听短信广播或数据库变化,这样即使应用被放到后台或屏幕锁定,也能继续监听短信。
2、问:如果需要将监听到的短信内容上传到服务器,应该如何实现?
答:可以使用OkHttp或其他网络库将短信内容异步上传到服务器,首先构造JSON对象包含短信内容和其他必要信息,然后使用POST请求将数据发送到后端接口,注意在上传数据前需要动态请求网络权限。
以上内容就是解答有关“android监听收到短信”的详细内容了,我相信这篇文章可以为您解决一些疑惑,有任何问题欢迎留言反馈,谢谢阅读。
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/637181.html