Android 通过获取每条短信的电话号码content://sms/

Android 通过获取每条短信的电话号码content://sms/,android,sms,Android,Sms,我编写了以下代码,以获取用户和号码之间的整个对话: Uri SMS_INBOX = Uri.parse("content://sms/"); String selection = "thread_id = " + thread_id; final String[] projection = new String[] { "*" }; Cursor c = getContentResolver().query(SMS_INBOX, projectio

我编写了以下代码,以获取用户和号码之间的整个对话:

Uri SMS_INBOX = Uri.parse("content://sms/");
        String selection = "thread_id = " + thread_id;
        final String[] projection = new String[] { "*" };
        Cursor c = getContentResolver().query(SMS_INBOX, projection, selection,null, "date");

        startManagingCursor(c);

        String[] body = new String[c.getCount()];
        String[] address = new String[c.getCount()];
        if (c.moveToFirst()) {
            for (int j = 0; j < c.getColumnCount(); j++)
                Log.w("ColumnName", c.getColumnName(j));
            for (int i = 0; i < c.getCount(); i++) {
                body[i] = c.getString(c.getColumnIndexOrThrow("body")).toString();
                address[i] = c.getString(c.getColumnIndexOrThrow("address")).toString();
                Log.d("address-" + i, address[i]);
                Log.d("body-" + i, body[i]);
                String subject =  c.getString(c.getColumnIndexOrThrow("_id")).toString();
                Log.d("_id-" + i, subject);
                String thread =  c.getString(c.getColumnIndexOrThrow("thread_id")).toString();
                Log.d("thread_id-" + i, subject);
                Log.d("----", "----");

                c.moveToNext();
            }

        }
urisms\u INBOX=Uri.parse(“content://sms/");
字符串选择=“线程id=”线程id;
最终字符串[]投影=新字符串[]{“*”};
游标c=getContentResolver().query(SMS_收件箱,投影,选择,空,“日期”);
开始管理光标(c);
String[]body=新字符串[c.getCount()];
字符串[]地址=新字符串[c.getCount()];
if(c.moveToFirst()){
对于(int j=0;j

通过这段代码,我可以获得对话中的所有信息。问题是,我不知道哪个号码在发送哪个信息。如果我得到“address”列,它会一直返回相同的数字(实际上它只返回其他人的数字),因此,我无法记录我刚刚通过此代码收到的消息是由用户发送的还是由其他号码发送的。

该列始终只提供第二个号码。如果要区分发送的消息和接收的消息,必须使用“类型”列

body[i] = c.getString(c.getColumnIndexOrThrow("body")).toString();

if(c.getString(c.getColumnIndex("type")).equalsIgnoreCase("1")){

                // sms received

                msg_state[i]=1;

             }

              else {
                //sms sent
                msg_state[i]=0;

             }

不,您可以轻松识别发送的短信和接收的短信。

我将在测试后尽快标记为应答。谢谢你的回复