You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:46:23