彩信发件人地址问题

时间:2011-06-17 00:57:07

标签: android mms

我正在尝试获取发件人的地址,但我遇到了一个小问题。如果发送消息的人是任何一个会话中的第一个发送消息的人,那么content://mms/inbox的查询将返回零行?但当有人发送任何其他mms消息时,它将返回_id罚款,我不明白为什么第一个不能正常工作?

private String checkMmsMessages(Context context){
    String address = "address";

    Cursor curPdu = context.getContentResolver ().query(Uri.parse("content://mms/inbox"), null, null, null, null);
    if(curPdu.moveToNext()){ //first MMS message curPdu.moveToNext() is false
    String id = curPdu.getString (curPdu.getColumnIndex ("_id"));

    Log.v("MMS", "ID1: " + id.toString());

    Uri uriAddr = Uri.parse ("content://mms/" + id + "/addr");
    Cursor curAddr = context.getContentResolver().query(uriAddr,null,"type=137",null,null);
    if(curAddr.moveToNext()){
             address = curAddr.getString (curAddr.getColumnIndex ("address"));
             Log.v("MMS", "Address1: " + address.toString());
             if(address.contentEquals("insert-address-token")){
                 Cursor curAddr2 = context.getContentResolver().query(uriAddr,null,"type=151", null,null);
                 if(curAddr2.moveToNext()){
                     address = curAddr2.getString(curAddr2.getColumnIndex("address"));
                 }
             }
        }
    }
    Log.v("MMS", address.toString());
    return address;
}

另外一些没有意义的事情是,当我将手机插入计算机并使用调试器逐步执行该部分时,该问题不会发生并且每次都会获取地址....当手机没有连接时发生,我只是不明白?

3 个答案:

答案 0 :(得分:1)

问题是我在将消息放入数据库之前检查了数据库,所以我不得不延迟检查

答案 1 :(得分:0)

我认为问题是您将selectionArgs的值传递给query()方法而不是null。我实际上并没在我的代码中调用mCursor的moveToNext()方法,而是在SimpleCursorAdapter的getView()方法中实现这个逻辑。

Uri uri = Uri.parse("content://mms-sms/conversations/" + mThreadId);
String[] projection = new String[] { "body", "person", "sub",
            "subject", "retr_st", "type", "date", "ct_cls", "sub_cs",
            "_id", "read", "ct_l", "st", "msg_box", "reply_path_present",
            "m_cls", "read_status", "ct_t", "status", "retr_txt_cs",
            "d_rpt", "error_code", "m_id", "date_sent", "m_type", "v",
            "exp", "pri", "service_center", "address", "rr", "rpt_a",
            "resp_txt", "locked", "resp_st", "m_size" };
String sortOrder = "normalized_date";

Cursor mCursor = getActivity().getContentResolver().query(uri,projection, null, null, sortOrder);

String messageAddress;
int type;
while (mCursor.moveToNext()) {
    String messageId = mCursor.getString(mCursor.getColumnIndex("_id"));

    Uri.Builder builder = Uri.parse("content://mms").buildUpon();
    builder.appendPath(messageId).appendPath("addr");
    Cursor c = mContext.getContentResolver().query(builder.build(), new String[] {
        "*"
    }, null, null, null);
    while (c.moveToNext()) {
        messageAddress = c.getString(c.getColumnIndex("address"));

        if (!messageAddress.equals("insert-address-token")) {
            type = c.getInt(c.getColumnIndex("type"));
            c.moveToLast();
        }
    }
    c.close();
}

答案 2 :(得分:0)

try this...


    private String getAddressNumber(String id) {
            String selectionAdd = new String("msg_id=" + id);
            String uriStr = MessageFormat.format("content://mms/{0}/addr", id);
            Uri uriAddress = Uri.parse(uriStr);
            Cursor cursor = getContentResolver().query(uriAddress, null, selectionAdd, null, null);

            String phoneNum = null;
            if (cursor.moveToFirst()) {
                do {
                    String number = cursor.getString(cursor.getColumnIndex("address"));
                    if (number != null) {
                        boolean isNumberFormat = true;
                        try {
                            Long.parseLong(number.replace("-", ""));
                            phoneNum = number;
                        } catch (NumberFormatException e) { // ex) "insert-address-token"
    //                        if (phoneNum == null) {
    //                            phoneNum = number;
    //                        }
                            isNumberFormat = false;
                        }
                        if (isNumberFormat)
                            break;
                    }
                } while (cursor.moveToNext());
            }
            if (cursor != null) {
                cursor.close();
            }
            return phoneNum;
        }