Android从线程id获取联系人id

标签 android sql sms

我正在开发一个简单的短信应用程序,我正在使用下面的代码在加载我的线程列表时获取线程 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

最佳答案

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

    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();
        }
    }

您的 list 中需要此权限:

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

希望对你有所帮助!

关于Android从线程id获取联系人id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16696264/

相关文章:

iphone - 消息与电子邮件

android - Gradle 同步失败 : Can't load library windows-amd64\native-platform. dll

c# - 如何从 ListView_ItemClick 设置 ActionBar 按钮 enabled=true?

android - 用于本地化布局的横向文件夹

Facebook样式墙的mysql查询

java - 从网站和桌面应用程序发送短信和调用语音电话的服务

android - 使用计算机名称而不是 IP 在 Mac 上查看本地 Web 服务器

sql - Flyway:无法确定类路径位置的 URL

MySQL:表达两个具有公共(public)基表外键的表的完全联接

Android - 为什么 ContentObserver 会调用自身?