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方法,但我假设它只是一个格式化函数。谢谢!这正是我要找的。