我一直在尝试检索短信息,但只是检索一切但是联系人的显示名称。 strDisplayName
仅显示特定联系人的数值,而不显示名称本身。所有其他字符串版本的数据都会正确显示其相应的信息(除了" date")。 我尝试过从其他答案中获取显示名称的其他实现,但这样做会导致应用在尝试测试时崩溃。
Uri smsData = Uri.parse("content://sms/" + folderName);
String[] id = new String[]
{
"_id", "person", "address",
"body", "date"
};
ContentResolver contentResolver = getContentResolver();
Cursor smsCursor = contentResolver.query(smsData, null, null, null, null);
// Retrieve index of data
int indexContactID = smsCursor.getColumnIndex(id[0]);
int indexDisplayName = smsCursor.getColumnIndex(id[1]);
int indexPhoneNumber = smsCursor.getColumnIndex(id[2]);
int indexMsg = smsCursor.getColumnIndex(id[3]);
int indexDate = smsCursor.getColumnIndex(id[4]);
if (indexMsg < 0 || !smsCursor.moveToFirst())
return;
mCustomAdapter.clear();
while (smsCursor.moveToNext())
{
// Retrieve string version of data
String strContactID = smsCursor.getString(indexContactID);
String strDisplayName = smsCursor.getString(indexDisplayName);
String strContactNumber = smsCursor.getString(indexPhoneNumber);
String strMsg = smsCursor.getString(indexMsg);
String strDate = smsCursor.getString(indexDate);
String[] textMessage = new String[]
{
strContactID, strDisplayName, strContactNumber,
strMsg, strDate
};
// Place collected data into custom adapter
mCustomAdapter.add(textMessage);
}
smsCursor.close();
答案 0 :(得分:0)
谁告诉你&#34;人&#34;是联系人的显示名称?
根据docs:
PERSON
会话发件人的ID(如果有)。
这实际上是&#34; sender-id&#34;这绝不是联系人ID,因为短信可以通过联系人,非联系电话号码,非电话号码(如GOOGLE
或FACEBOOK
)和包含的组发送两种或多种上述类型。
如果您想检查这是否是联系人,如果是,请获取联系人姓名,您需要通过两个步骤:
RecipientIdCache
PHONE_LOOKUP
表格查找该号码的联系人,这样会有所帮助:https://stackoverflow.com/a/7967182/819355