我正在尝试使用这段代码获取一个传出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 = 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;
}但它返回的是“插入-地址-令牌”而不是实际地址。
发布于 2016-04-18 06:06:57
我遇到了同样的问题,经过一番探索,发现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);
}发布于 2017-11-12 23:20:23
试试这个..。
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;
}https://stackoverflow.com/questions/18175283
复制相似问题