Android传出彩信获取地址

Android传出彩信获取地址,android,mms,Android,Mms,我正在尝试使用此代码获取传出彩信的收件人地址 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 cAdd

我正在尝试使用此代码获取传出彩信的收件人地址

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 cAdd = getContentResolver().query(uriAddress, null,
            selectionAdd, null, null);
    String name = null;
    if (cAdd.moveToFirst()) {
        do {
            String number = cAdd.getString(cAdd.getColumnIndex("address"));
            if (number != null) {
                try {
                    Long.parseLong(number.replace("-", ""));
                    name = number;
                } catch (NumberFormatException nfe) {
                    if (name == null) {
                        name = number;
                    }
                }
            }
        } while (cAdd.moveToNext());
    }
    if (cAdd != null) {
        cAdd.close();
    }
    return name;
}

但是它返回的是“插入地址令牌”,而不是实际的地址。

我遇到了同样的问题,经过一些探索,得出如下解决方案,mms是特殊的,因为它的传出消息在日期字段中不反映发送时间,而且,地址字段将是“插入地址令牌”,类型将是151,要获取收件人编号,我们需要将多个表的查询组合在一起:

private static String getAddressNumberOfRecipient(int threadId) {
    String selectionAdd = Telephony.Threads._ID + "=" + threadId;
    String uriStr = MessageFormat.format("content://mms-sms/conversations/{0}/recipients", threadId);
    Uri uriAddress = Uri.parse(uriStr);
    String[] columns = {Telephony.Threads.RECIPIENT_IDS};
    Cursor cAdd = context.getContentResolver().query(uriAddress, columns, selectionAdd, null, null);
    String name = null;
    if (cAdd.moveToFirst()) {
        do {
            name = cAdd.getString(cAdd.getColumnIndex(Telephony.Threads.RECIPIENT_IDS));
            if (!TextUtils.isEmpty(name)) {
                break;
            }
        }
        while (cAdd.moveToNext());
    }
    if (cAdd != null) {
        cAdd.close();
    }

    return TextUtils.isEmpty(name) ? "" : getCanonicalRecipient(Integer.parseInt(name.split(" ")[0]));
}

private static String getCanonicalRecipient(int recipientId) {
    String selectionAdd = Telephony.CanonicalAddressesColumns._ID + "=" + recipientId;
    String uriStr = MessageFormat.format("content://mms-sms/canonical-address/{0}", recipientId);
    Uri uriAddress = Uri.parse(uriStr);
    String[] columns = {Telephony.CanonicalAddressesColumns.ADDRESS};
    Cursor cAdd = context.getContentResolver().query(uriAddress, columns, selectionAdd, null, null);
    String name = null;
    if (cAdd.moveToFirst()) {
        do {
            name = cAdd.getString(cAdd.getColumnIndex(Telephony.CanonicalAddressesColumns.ADDRESS));
            if (!TextUtils.isEmpty(name)) {
                break;
            }
        }
        while (cAdd.moveToNext());
    }
    if (cAdd != null) {
        cAdd.close();
    }
    return TextUtils.isEmpty(name) ? "" : filterPhoneNumber(name);
}

我遇到了同样的问题,经过一番探索,得出如下解决方案,mms是特殊的,因为它的发送消息不反映日期字段中的发送时间,而且,地址字段将是“插入地址令牌”,类型将是151,要获得收件者号码,我们需要将多个表的查询组合在一起:

private static String getAddressNumberOfRecipient(int threadId) {
    String selectionAdd = Telephony.Threads._ID + "=" + threadId;
    String uriStr = MessageFormat.format("content://mms-sms/conversations/{0}/recipients", threadId);
    Uri uriAddress = Uri.parse(uriStr);
    String[] columns = {Telephony.Threads.RECIPIENT_IDS};
    Cursor cAdd = context.getContentResolver().query(uriAddress, columns, selectionAdd, null, null);
    String name = null;
    if (cAdd.moveToFirst()) {
        do {
            name = cAdd.getString(cAdd.getColumnIndex(Telephony.Threads.RECIPIENT_IDS));
            if (!TextUtils.isEmpty(name)) {
                break;
            }
        }
        while (cAdd.moveToNext());
    }
    if (cAdd != null) {
        cAdd.close();
    }

    return TextUtils.isEmpty(name) ? "" : getCanonicalRecipient(Integer.parseInt(name.split(" ")[0]));
}

private static String getCanonicalRecipient(int recipientId) {
    String selectionAdd = Telephony.CanonicalAddressesColumns._ID + "=" + recipientId;
    String uriStr = MessageFormat.format("content://mms-sms/canonical-address/{0}", recipientId);
    Uri uriAddress = Uri.parse(uriStr);
    String[] columns = {Telephony.CanonicalAddressesColumns.ADDRESS};
    Cursor cAdd = context.getContentResolver().query(uriAddress, columns, selectionAdd, null, null);
    String name = null;
    if (cAdd.moveToFirst()) {
        do {
            name = cAdd.getString(cAdd.getColumnIndex(Telephony.CanonicalAddressesColumns.ADDRESS));
            if (!TextUtils.isEmpty(name)) {
                break;
            }
        }
        while (cAdd.moveToNext());
    }
    if (cAdd != null) {
        cAdd.close();
    }
    return TextUtils.isEmpty(name) ? "" : filterPhoneNumber(name);
}
试试这个

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;
    }
试试这个

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;
    }

id来自哪里?来自a的_id属性content://mms 游标。id来自何处?来自content://mms 游标。我知道它有点过时,但仅供参考,您没有记录filterPhoneNumber方法,但我假设它只是一个格式化函数。谢谢!这正是我想要的。我知道它有点过时,但仅供参考,您没有记录filterPhoneNumber方法,但我假设它只是一个格式化函数。谢谢!这正是我要找的。