标签:11 短消息 获取 广播 intent 接收器 Android 卡槽 SmsMessage
使用装有MIUI系统的小米手机,静态注册的广播接收器监听短消息。
- 在
AndroidManifest.xml
中声明权限
<uses-permission android:name="android.permission.RECEIVE_SMS" />
- 在
AndroidManifest.xml
中声明广播接收器
<receiver
android:name=".SmsReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
- 广播接收器代码:
public class SmsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 从intent中获取消息
SmsMessage[] smsMessages = getMessagesFromIntent(intent);
// 获取短信发送者号码
String senderNumber = smsMessages[0].getOriginatingAddress();
// 组装短信内容
StringBuilder content = new StringBuilder();
for (SmsMessage smsMessage : smsMessages) {
content.append(smsMessage.getMessageBody());
}
// 获取卡槽位置
Bundle bundle = intent.getExtras();
int slot = bundle.getInt("android.telephony.extra.SLOT_INDEX", -1);
}
}
要点:
- 先通过
getMessagesFromIntent(Intent)
获取SmsMessage
数组 - 再通过遍历
SmsMessage
数组,把每一条SmsMessage
的getMessageBody()
组装成短信内容 - 短信发送者号码可以通过首个
SmsMessage
对象的getOriginatingAddress()
方法获得 - 对于双卡手机,还可以在广播到达的
Intent
的Bundle
中, 通过Bundle.getInt("android.telephony.extra.SLOT_INDEX", -1)
, 来获取卡槽的位置。0为卡槽1,1为卡槽2。获取失败为-1。
注意:
- MIUI 等定制系统,申请权限可能不会弹窗,需要手动去设置中打开权限。
- MIUI 等定制系统,需打开应用的自启动功能,方可在短信到达时后台启动应用,运行广播接收器中相应逻辑。
- 广播接收器
onReceive
方法的超时限制有 10s,超过10s后系统会弹 ANR 弹窗。
标签:11,短消息,获取,广播,intent,接收器,Android,卡槽,SmsMessage 来源: https://www.cnblogs.com/wx2020/p/16217323.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。