小编典典

Android从线程ID获取联系人ID

sql

我正在使用一个简单的短信应用程序,正在使用以下代码在加载线程列表时获取线程ID,但是我不知道如何使用线程ID获取联系人ID。我是root用户,并且使用root资源管理器,我可以在数据库中看到一个带有以下各列的联系人表

thread_id | htcthread_id | contact_id

因此,由于我具有线程ID,因此我应该能够获取联系人ID,但我还需要确保该方法在所有设备上均有效。我的应用不是root用户

获取线程ID的代码

Uri uri = Uri.parse("content://mms-sms/conversations?simple=true");
Cursor c = context.getContentResolver().query(uri, null, null, null, "date desc");
if (c.getCount() > 0) {
    while (c.moveToNext()){
        //thread id is c.getString(c.getColumnIndexOrThrow("_id"))
    }
}
c.close

阅读 197

收藏
2021-04-14

共1个答案

小编典典

我恢复所有联系人的解决方案:

    Cursor cursor = null;
    try {
        cursor = context.getContentResolver().query(Phone.CONTENT_URI, null, null, null, null);
        int contactIdIdx = cursor.getColumnIndex(Phone._ID);
        int nameIdx = cursor.getColumnIndex(Phone.DISPLAY_NAME);
        int phoneNumberIdx = cursor.getColumnIndex(Phone.NUMBER);
        int photoIdIdx = cursor.getColumnIndex(Phone.PHOTO_ID);
        cursor.moveToFirst();
        do {
            String idContact = cursor.getString(contactIdIdx);
            String name = cursor.getString(nameIdx);
            String phoneNumber = cursor.getString(phoneNumberIdx);
            //...
        } while (cursor.moveToNext());  
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (cursor != null) {
            cursor.close();
        }
    }

您需要在清单中获得以下许可:

<uses-permission android:name="android.permission.READ_CONTACTS" />

希望我能对您有所帮助!

2021-04-14