Android 使用内容提供商查询获取特定号码的所有对话短信

Android 使用内容提供商查询获取特定号码的所有对话短信,android,sms,android-contentprovider,Android,Sms,Android Contentprovider,我正在创建一个应用程序,显示所有收件箱短信。在短信息列表中,有一个按钮,可以阅读该号码与我的所有对话 它是通过获取intent对象并将该对象与类似此函数的记录地址查询进行比较来完成的` public void readConversation() { try { StringBuilder smsBuilder = new StringBuilder(); cur = getContentResolver().query(Uri.parse(SMS_UR

我正在创建一个应用程序,显示所有收件箱短信。在短信息列表中,有一个按钮,可以阅读该号码与我的所有对话

它是通过获取intent对象并将该对象与类似此函数的记录地址查询进行比较来完成的`

public void readConversation() {
    try {

        StringBuilder smsBuilder = new StringBuilder();
        cur = getContentResolver().query(Uri.parse(SMS_URI_ALL), null,
                null, null, "date ASC");
        int smsEntriesCount = cur.getCount();

        Log.d("smsEntriesCount", "" + smsEntriesCount);

        if (cur.moveToFirst()) {
            do {

                data = new HashMap<String, String>();

                String smsAdress = cur.getString(
                        cur.getColumnIndexOrThrow("address")).toString();
                String smsbody = cur.getString(
                        cur.getColumnIndexOrThrow("body")).toString();
                String smsid = cur.getString(
                        cur.getColumnIndexOrThrow("_id")).toString();
                String smsdate = cur.getString(
                        cur.getColumnIndexOrThrow("date")).toString();
                String smstype = cur.getString(
                        cur.getColumnIndexOrThrow("type")).toString();
                String smsStatus = cur.getString(
                        cur.getColumnIndexOrThrow("status")).toString();
                String smsReadUnread = cur.getString(
                        cur.getColumnIndexOrThrow("read")).toString();

                String contactnamelist = getContactDisplayNameByNumber(smsAdress);

                if (smsAdress.equalsIgnoreCase(straddress.trim())) {
                    data.put("_id", smsid);
                    data.put("address", contactnamelist);
                    data.put("body", smsbody);
                    data.put("date", smsdate);
                    data.put("type", smstype);
                    data.put("status", smsStatus);
                    data.put("ReadUnread", smsReadUnread);
                    NumberList123.add(data);

                    Log.d("Conversation id", smsid);
                    Log.d("Conversation Address", smsAdress);
                    Log.d("Conversation body", smsbody);
                    Log.d("Conversation date", smsdate);
                    Log.d("Conversation type", smstype);
                    Log.d("Conversation status", smsStatus);
                    Log.d("Conversation Read(1)-Unread(0)", smsReadUnread);

                }
            } while (cur.moveToNext());

        }
        convolistnumber = new application();
        convolistnumber.setListConvo(NumberList123);

        Log.d(Tag, " Arraylist size " + NumberList123.size());
        Log.d(Tag, "Convo List" + convolistnumber.getConvoList().size());



        if (!cur.isClosed()) {
            cur.close();
            cur = null;

        } else {
            smsBuilder.append("no result!");
        } 

    } catch (SQLiteException ex) {
        ex.printStackTrace();
    }
}
public void readConversation(){
试一试{
StringBuilder smsBuilder=新StringBuilder();
cur=getContentResolver(),
空,空,“日期ASC”);
int-smsentriesunt=cur.getCount();
Log.d(“SMsentriesunt”、“SMsentriesunt+SMsentriesunt”);
if(cur.moveToFirst()){
做{
data=newhashmap();
字符串smsAdress=cur.getString(
cur.getColumnIndexOrThrow(“地址”).toString();
字符串smsbody=cur.getString(
cur.getColumnIndexOrThrow(“body”).toString();
字符串smsid=cur.getString(
cur.getColumnIndexOrThrow(“\u id”).toString();
字符串smsdate=cur.getString(
cur.getColumnIndexOrThrow(“日期”)).toString();
字符串smstype=cur.getString(
cur.getColumnIndexOrThrow(“类型”)).toString();
字符串smsStatus=cur.getString(
cur.getColumnIndexOrThrow(“状态”)).toString();
字符串smsReadUnread=cur.getString(
cur.getColumnIndexOrThrow(“读取”)).toString();
字符串contactnamelist=getContactDisplayNameByNumber(smsAdress);
if(smsAdress.equalsIgnoreCase(straddress.trim())){
数据输入(“_id”,smsid);
数据输入(“地址”,联系人姓名列表);
数据输入(“正文”,smsbody);
数据输入(“日期”,smsdate);
数据输入(“类型”,smstype);
数据输入(“状态”,smsStatus);
data.put(“ReadUnread”,smsReadUnread);
NumberList123.add(数据);
Log.d(“会话id”,smsid);
Log.d(“对话地址”,smsAdress);
Log.d(“对话主体”,smsbody);
日志d(“对话日期”,smsdate);
Log.d(“对话类型”,smstype);
Log.d(“对话状态”,smsStatus);
Log.d(“会话已读(1)-未读(0)”,smsReadUnread;
}
}while(cur.moveToNext());
}
convalistnumber=新应用程序();
ConvalistNumber.SetListConva(NumberList123);
Log.d(标记“Arraylist size”+NumberList123.size());
Log.d(标记“conva List”+convalistnumber.getconvalist().size());
如果(!cur.isClosed()){
cur.close();
cur=null;
}否则{
追加(“无结果!”);
} 
}catch(SQLiteException-ex){
例如printStackTrace();
}
}
`

通过使用这个功能,我得到了该号码的所有对话,它是来自按钮点击的主要活动,但它得到了更多的时间,因为我搜索所有短信地址到该号码,这需要很多时间…所以任何解决方案,如果我在查询中检查该号码,这意味着该功能运行迅速

我还试图检查光标中的地址,但结果只显示收件人发送的短信,我希望所有发送的和收件箱中的短信都表示对话


提前谢谢

嘿,robinhood thaks回复…但我使用了相同的方法,它可以工作,但我的问题是,如果手机有500条短信,那么它会检查所有500条短信地址,然后给我输出,这需要很多时间…我想减少加载时间。。