2015-05-14 134 views
2

我在这个主题Android get contact id from thread id有人有我问的完全相同的问题。不幸的是,lopez.mikhael完全没有回答这个问题。通过thread_id获取联系

如何从URI content://sms/conversations获取带有thread_id的联系人ID?假设它返回:

- thread_id 
- snippet 
- msg_count 

获取所有联系人不起作用。我在这里搜索了getColumnsNames(),我没有看到任何包含thread_id的好列名。

为什么没有记录?是否弃用content://sms/?还有其他解决方案吗?

谢谢。

+0

从列名的地址找到联系人的标识,你可以得到联系人的电话号码,然后使用该电话号码就可以得到联系方式 –

+0

如何我可以在“content:// sms/conversations”中找到没有任何信息的特定联系人吗? – Sw0ut

回答

2

如这里提到的这个post

您可以获取短信收件箱:

Uri mSmsinboxQueryUri = Uri.parse("content://sms/inbox"); 
    String where = "thread_id="+ <thread id you get it from content://sms/conversations>; 
    Cursor cursor1 = getContentResolver().query(mSmsinboxQueryUri,new String[] { "_id", "thread_id", "address", "person", "date","body", "type" }, where, null, null); 
    String[] columns = new String[] { "address", "person", "date", "body","type" }; 
    if (cursor1.getCount() > 0) { 
     String count = Integer.toString(cursor1.getCount()); 
     while (cursor1.moveToNext()){ 
       String address = cursor1.getString(cursor1.getColumnIndex(columns[0])); 
       String name = cursor1.getString(cursor1.getColumnIndex(columns[1])); 
       String date = cursor1.getString(cursor1.getColumnIndex(columns[2])); 
       String msg = cursor1.getString(cursor1.getColumnIndex(columns[3])); 
       String type = cursor1.getString(cursor1.getColumnIndex(columns[4])); 
     } 
    } 

您可以获取通过改变URI等发送的项目。

Uri mSmsinboxQueryUri = Uri.parse("content://sms/sent"); 

那些你有电话号码,你可以使用下面的代码

String contactid = null; 

ContentResolver contentResolver = getContentResolver(); 

Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phonenumintolist)); 

Cursor cursor = contentResolver.query(
         uri, 
         new String[] {PhoneLookup.DISPLAY_NAME, PhoneLookup._ID}, 
         null, 
         null, 
         null); 

if(cursor!=null) { 
while(cursor.moveToNext()){ 
    String contactName = cursor.getString(cursor.getColumnIndexOrThrow(PhoneLookup.DISPLAY_NAME)); 
    contactid = cursor.getString(cursor.getColumnIndexOrThrow(PhoneLookup._ID)); 
} 
cursor.close(); 
} 
if (contactid == null) { 
    Toast.makeText(DetailedCallHistory.this, "No contact found associated with this number", Toast.LENGTH_SHORT).show(); 
}else{ 
//You can contact id do what you want to do with it. 
} 
+0

我已经找到答案但没有找到答案。我想只有第一次对话。可能吗 ?这是用于收件箱或发送的项目。你不回答我的问题。 - **编辑** - 或者告诉我,如果我问的是不可能的? – Sw0ut

+0

检查更新。我已添加where子句获取收件箱短信基于thread_id,从thread_id您可以获取电话号码,并从phonenumber获得联系人ID –

+0

谢谢你的完整答案,但仍然不符合我的期望。实际上,从消息应用程序中获取示例。首先你得到所有的谈话,然后如果你点击一个谈话,你会得到这个谈话的完整收到/发送的消息。我想要第一个屏幕上的联系人ID,它显示了所有的对话。有任何想法吗 ?因为这是我们在谈话内部的联系信息。 – Sw0ut