mid*_*nhk 5 android message android-contacts
我试图从手机的短信收件箱中找到与短信相对应的联系方式.从我的理解的person
列是一个外键_id
的列ContactsContract.Contacts
.
我的问题是我person
从sms查询中得到了错误的值.person
联系表中不存在某些ID,有些ID指向完全不同的联系人.
下面是我用来获取person
值列表的代码,任何人都可以告诉我,如果我错过了什么或遇到类似的问题.
使用运行Android 4.1.2的Nexus S进行测试
Uri parsedUri = Uri.parse("content://sms/inbox");
String[] projection = new String[] { "_id", "address", "person" };
Cursor cursor = contentResolver.query(parsedUri, projection, null, null, null);
Log.d(TAG, "Total Count " + cursor.getCount());
if (cursor.getCount() > 0) {
// String address;
int person;
int personIndex = cursor.getColumnIndex("person");
if (cursor.moveToFirst())
do {
person = cursor.getInt(personIndex);
if (person > 0) {
// Add this id to a list
}
} while (cursor.moveToNext());
}
cursor.close();
Run Code Online (Sandbox Code Playgroud)
更新:我正在查看Android Developer Portal
(http://developer.android.com/guide/topics/providers/contacts-provider.html)中的一些文档,是否有可能person
从短信收件箱中检索到的ID是指的ContactsContract.RawContacts
,而不是ContactsContract.Contacts
因为我已经做了.
实际上,短信收件箱中的人员栏是指RawContacts
条目的ID.通过查询 RawContacts
表,您可以找到特定用户contact_id
的Contacts
表.
您可以尝试使用此代码从RawContacts表中获取联系人ID.
long contactId = 0;
Uri uri = ContactsContract.RawContacts.CONTENT_URI;
String[] projection = new String[] { ContactsContract.RawContacts._ID, ContactsContract.RawContacts.CONTACT_ID };
Cursor cursor = contentResolver.query(uri, projection,
ContactsContract.RawContacts._ID + " = ?",
new String[] { rawContactId }, null);
if (cursor.moveToFirst()) {
int contactIdIndex = cursor.getColumnIndex(ContactsContract.RawContacts.CONTACT_ID);
contactId = cursor.getLong(contactIdIndex);
}
cursor.close();
Run Code Online (Sandbox Code Playgroud)
这可以通过阅读Android中的短信行来解决您获取正确联系人详细信息的问题.然而,由于短信数据提供商没有记录,手机制造商可能会以不同方式使用它们,因此这种方法可能无法在除纯机器人之外的手机上使用.
归档时间: |
|
查看次数: |
1181 次 |
最近记录: |