安卓短信历史记录

标签 android

我们目前有一个向用户发送短信的应用程序,它的作用就像 Android 手机上的短信网关。

我遇到了很多关于如何读取短信、短信线程等的问题,我想知道是否可以找出线程和传入短信属于哪个线程。

我们正在考虑自动化,我们向用户发送带有订单 ID 的短信,当用户回复时,我们希望找出短信属于哪个线程,并尝试从发起对话的短信中提取订单 ID 。

最佳答案

您可以通过下面的代码找到线程ID。但最好只查询具有相同地址的所有消息,并且它是出站的(我认为 Sms.TYPE == 2)。这样您就可以绕过对线程 ID 的需要,只需开始一次性查找订单 ID。

import android.provider.Telephony.Sms;
import android.provider.Telephony.Sms.Intents;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.telephony.SmsMessage;

public class SmsReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intents.SMS_RECEIVED_ACTION)){
            int threadId = 0;
            SmsMessage[] messages = Intents.getMessagesFromIntent(intent);

            String fromAddress = messages[0].getDisplayOriginatingAddress();

            Cursor c = Sms.query(context.getContentResolver(), 
                                 new String[]{Sms.THREAD_ID}, 
                                 Sms.ADDRESS+"="+fromAddress, 
                                 Sms.DATE+" DESC");
            if(c.moveToNext()){
                threadId = c.getInt(0);
            }

            c.close();

            if(threadId!=0){
                //query the Sms again, reading body for your Order ID, etc ...
            }
        }
    }
}

关于安卓短信历史记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4923185/

相关文章:

android - 如何用逗号分隔数组列表值并放入hashmap

android - Android SDK 和 AVD 管理器拒绝连接

Android - BiometricPrompt 检测是否是面部识别码或触摸识别码

android - 大上传选择哪个Android服务路径?

Android 用户界面规模

android - 在倒计时结束前播放声音

android - 为什么同一段(简单的)Java 代码在不同的 Android 设备上表现非常不同?

Android:ListView 的工作原理

Android - 获取浏览器历史记录

java - 带 actionBar 的 fragment RTL