首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android传出MMS get地址

Android传出MMS get地址
EN

Stack Overflow用户
提问于 2013-08-11 18:33:30
回答 2查看 1.4K关注 0票数 2

我正在尝试使用这段代码获取一个传出MMS的收件人地址。

代码语言:javascript
复制
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;
}

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-18 06:06:57

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

代码语言:javascript
复制
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);
}
票数 1
EN

Stack Overflow用户

发布于 2017-11-12 23:20:23

试试这个..。

代码语言:javascript
复制
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;
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18175283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档