public class SmsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] pdusObj = (Object[]) bundle.get("pdus");
SmsMessage[] messages = new SmsMessage[pdusObj.length];
for (int i = 0; i < messages.length; i++) {
String format = bundle.getString("format");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
messages[i] = SmsMessage.createFromPdu((byte[]) pdusObj[i], format);
} else {
messages[i] = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
}
}
for (SmsMessage msg : messages) {
Log.i("log", "display msg body : " + msg.getDisplayMessageBody() + "originating address : " + msg.getDisplayOriginatingAddress() + " get message body : " + msg.getMessageBody());
//here I have to write the message to the sms provider.
}
}
}
}
更新
我已经尝试了Android-Kitkat-API-19-how-to-write-messages-in-sms-content-provider-毫无疑问,但我无法绕过它。该解决方案用于向发送的SMS进行写入,而无需执行类似发送SMS的任何操作。但是我想把收到的短信写在这里。
感谢Mike M的帮助。我从SO的这个答案-sms-doesnt-save-on-kitkat-4-4-4-已经设置为默认的消息传递应用程序和这个post-kitkat-sms-Mms-supports中得到了帮助。
以下是我所做的:
为了将短信写入android系统的短信提供程序,我使用了内容提供程序。并将值传递给它。代码段如下:
ContentValues values = new ContentValues();
values.put(Telephony.Sms.ADDRESS, msg.getDisplayOriginatingAddress());
values.put(Telephony.Sms.BODY, msg.getMessageBody());
context.getApplicationContext().getContentResolver().insert(Telephony.Sms.Sent.CONTENT_URI, values);
public class SmsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] pdusObj = (Object[]) bundle.get("pdus");
SmsMessage[] messages = new SmsMessage[pdusObj.length];
for (int i = 0; i < messages.length; i++) {
String format = bundle.getString("format");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
messages[i] = SmsMessage.createFromPdu((byte[]) pdusObj[i], format);
} else {
messages[i] = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
}
}
for (SmsMessage msg : messages) {
Log.i("log", "display msg body : " + msg.getDisplayMessageBody() + "originating address : " + msg.getDisplayOriginatingAddress() + " get message body : " + msg.getMessageBody());
ContentValues values = new ContentValues();
values.put(Telephony.Sms.ADDRESS, msg.getDisplayOriginatingAddress());
values.put(Telephony.Sms.BODY, msg.getMessageBody());
context.getApplicationContext().getContentResolver().insert(Telephony.Sms.Sent.CONTENT_URI, values);
}
}
}
}
通过在中创建一个条目并实现,我实现了RECEIVE_BOOT_COMPLETED。 在仿真器(Pixel 2 API 21)上运行时,它可以很好地工作。但是,当它在API级别30或物理设备OnePlus6(Oxygen10.3.7)上运行时,不会收到引导通知。 但是,当手机重新启动时,其他应用程序如Whatsapp、Sms等可以接收来自服务器的消息,可能会使用一些通知事件。这怎么可能?
当监听设备后,会返回接收到的消息数据。 请求方式: 无 返回值: "|4|2|5|message|" 返回接收到的消息 参数 message 返回的消息内容
我正在开发的一个应用程序允许用户自己读取确认短信的内容,输入验证码。对于使用早于Oreo(API 26)的操作系统的所有设备,BroadcastReceiver的实现工作正常,并允许正确接收SMS。在这个实现中,我的意思是将receiver对象放置在AndroidManifest中。 但是,从Oreo开始,必须显式地将BroadcastReceivers注册到适当的上下文。我对此执行如下: 在接收
当订阅的topic接收到消息后,会返回接收到的消息数据。 请求方式: 无 返回值: "|4|1|5|topic|message|\r" 返回接收到的消息 参数 topic 返回消息的topic message 返回的消息内容
我正在开发一个iOS消息应用程序,使用Twilio发送和接收短信和彩信。关于iOS客户端的Twilio教程似乎只涵盖了呼出和呼入。我理解发送SMS/MMS意味着我向服务器发送HTTP请求,其中我的服务器将请求发送到Twilio以完成发送。然而,我如何在我的应用程序上接收消息?
主要内容:1 Broker处理请求入口,1.1 registerProcessor注册消息处理器,1.2 NettyServerHandler处理请求,1.3 processRequestCommand分发处理请求,2 asyncProcessRequest异步处理请求,2.1 asyncProcessRequest异步处理请求,3 总结基于RocketMQ release-4.9.3,深入的介绍了Broker接收消息源码入口。 此前我们学习了RocketMQ的Producer发送消息的源码,首