Android 接收短信广播
在 Android 系统中,可以通过注册广播接收器来接收短信广播,短信广播是一种系统级别的广播,当有新的短信到达时,系统会发送一个短信广播通知应用程序,下面将详细介绍如何接收短信广播。
1、注册广播接收器
要接收短信广播,首先需要在应用程序中注册一个广播接收器,可以使用以下代码在 AndroidManifest.xml 文件中注册:
<receiver android:name=".SmsReceiver"> <intentfilter> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intentfilter> </receiver>
上述代码中,SmsReceiver
是自定义的广播接收器类名,需要根据自己的实际情况进行替换。android.provider.Telephony.SMS_RECEIVED
是短信广播的 Action 字符串。
2、创建广播接收器类
接下来,需要创建一个继承自 BroadcastReceiver
的类,用于处理接收到的短信广播,以下是一个简单的示例:
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 message = SmsMessage.createFromPdu((byte[]) pdu); String sender = message.getDisplayOriginatingAddress(); String body = message.getDisplayMessageBody(); // 在这里可以对收到的短信进行处理,例如显示在界面上或者存储到数据库中 } } } }
上述代码中,onReceive()
方法会在接收到短信广播时被调用,通过 intent.getExtras()
获取到包含短信信息的 Bundle
对象,然后从中提取出短信内容和发送者等信息,可以根据实际需求对短信进行处理。
3、动态注册广播接收器(可选)
如果只在应用程序运行时接收短信广播,可以在需要的时候动态注册广播接收器,使用以下代码进行注册:
IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED"); registerReceiver(smsReceiver, filter);
上述代码中,smsReceiver
是之前创建的 SmsReceiver
实例,注册后,应用程序将会监听短信广播并触发相应的处理逻辑,如果不再需要接收短信广播,可以使用以下代码进行注销:
unregisterReceiver(smsReceiver);
4、权限设置(可选)
在 AndroidManifest.xml 文件中,还需要添加以下权限声明:
<a href="https://developer.android.com/reference/android/Manifest.permission#READ_SMS"><code>READ_SMS</code></a>
该权限允许应用程序读取收到的短信内容,如果没有添加该权限,可能会导致无法正常读取短信内容,请注意,从 Android 6.0(API 级别 23)开始,用户必须在安装应用程序时授予该权限,建议在运行时请求该权限,可以使用以下代码进行权限请求:
if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_SMS) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.READ_SMS}, PERMISSION_REQUEST_CODE); } else { // 已经拥有权限,可以进行相关操作 }
PERMISSION_REQUEST_CODE
是一个自定义的请求码,用于在权限请求结果回调中区分不同的请求,请确保在合适的时机检查和请求权限。
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/537785.html