如何在BroadcastReceiver短信接收代码中获取短信的发送与接收时间
获取短信的发送时间与接收时间
嘿,我来帮你搞定这个问题~其实这两个时间的获取都有现成的方法,结合你的现有代码就能轻松实现:
1. 短信发送时间
SmsMessage 类自带了 getTimestampMillis() 方法,它会返回短信发送时的毫秒级时间戳,咱们把它转换成可读性强的日期格式就行。
2. 短信接收时间
当 BroadcastReceiver 的 onReceive 方法被触发时,就是设备接收到短信的时间点,直接用 System.currentTimeMillis() 就能拿到接收时间的时间戳,同样转成日期格式就搞定了。
下面是修改后的完整代码,我把获取时间的逻辑加了进去,还顺便把时间也通过本地广播传递出去了:
@Override public void onReceive(Context context, Intent intent) { final Bundle bundle = intent.getExtras(); try { if (bundle != null) { final Object[] pdusObj = (Object[]) bundle.get("pdus"); assert pdusObj != null; for (int i = 0; i < pdusObj.length; i++) { SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]); String senderNum = currentMessage.getDisplayOriginatingAddress(); String message = currentMessage.getDisplayMessageBody(); // 获取并格式化短信发送时间 long sendTimeMillis = currentMessage.getTimestampMillis(); String sendTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()).format(new Date(sendTimeMillis)); // 获取并格式化短信接收时间(广播触发时刻即为接收时间) long receiveTimeMillis = System.currentTimeMillis(); String receiveTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()).format(new Date(receiveTimeMillis)); Log.i("SmsReceiver", "senderNum: " + senderNum + "; message: " + message); Log.i("SmsReceiver", "发送时间: " + sendTime + "; 接收时间: " + receiveTime); Intent myIntent = new Intent("sms_received"); myIntent.putExtra("message", message); // 可选:把时间也传递给接收方 myIntent.putExtra("sendTime", sendTime); myIntent.putExtra("receiveTime", receiveTime); LocalBroadcastManager.getInstance(context).sendBroadcast(myIntent); } } } catch (Exception e) { Log.e("SmsReceiver", "Exception smsReceiver" + e); } }
小提醒:
- 记得导入相关类:
java.text.SimpleDateFormat、java.util.Date、java.util.Locale,不然编译会报错。 - 要是想要自定义日期显示格式,直接修改
SimpleDateFormat里的字符串就行,比如只想看时分秒就用"HH:mm:ss"。
内容的提问来源于stack exchange,提问作者Vineeth Mohan
相关产品推荐
相关产品推荐

