Android 如何获取所有消息';s的主体通过线程\u id?

Android 如何获取所有消息';s的主体通过线程\u id?,android,sms,android-contentprovider,Android,Sms,Android Contentprovider,我有一个显示收件箱的活动此活动有一个listview和一个OnItemClickListener,当我单击每个项目时,一个新的活动开始:我想显示我单击的联系人的所有消息此处是我此活动代码的一部分: super.onCreate(savedInstanceState); setContentView(R.layout.activity_conversation); ContentResolver contentResolver = getContentResolver();

我有一个显示收件箱的活动此活动有一个listview和一个OnItemClickListener,当我单击每个项目时,一个新的活动开始:我想显示我单击的联系人的所有消息此处是我此活动代码的一部分:

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_conversation);
    ContentResolver contentResolver = getContentResolver();
    Bundle extras = getIntent().getExtras();
    String value = null;
    if (extras != null) {
        value = extras.getString("id");
    }
    Uri uri = Uri.parse("content://sms/conversations/");
    Cursor smsCur = contentResolver.query(uri, null, "thread_id=" + value, null, null);

现在我想通过线程id获取我从以前的活动中获取的所有消息,但我不知道如何获取?我的问题是如何获取消息体?关于这个主题有很多问题,但我没有找到关于如何查询消息体的任何信息

您可以使用以下代码获取对话

获取已发送的消息

Uri mSmsinboxQueryUri = Uri.parse("content://sms/sent");
获取收件箱消息的步骤

Uri mSmsinboxQueryUri = Uri.parse("content://sms/inbox");
对于短信息和彩信:

Uri uri = Uri.parse("content://mms-sms/conversations/");
下面是阅读消息的代码

Cursor cursor1 = getContentResolver().query(mSmsinboxQueryUri,new String[] { "_id", "thread_id", "address", "person", "date","body", "type" }, null, 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 mSmsinboxQueryUri = Uri.parse("content://sms/sent");
获取收件箱消息的步骤

Uri mSmsinboxQueryUri = Uri.parse("content://sms/inbox");
对于短信息和彩信:

Uri uri = Uri.parse("content://mms-sms/conversations/");
下面是阅读消息的代码

Cursor cursor1 = getContentResolver().query(mSmsinboxQueryUri,new String[] { "_id", "thread_id", "address", "person", "date","body", "type" }, null, 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]));
    }
}
参考资料


我找到了一种通过线程id获取对话所有消息的方法,因此我可以只获取两条消息之间的消息,而不获取其他消息:

 Uri uri = Uri.parse("content://sms/");
 cursor = contentResolver.query(uri, null, "thread_id=" + value, null, "date asc");

有一个名为“type”的列显示消息是传入的还是传出的,因此传入消息显示属于联系人的部分对话,传出消息显示我的部分对话,我认为这是一种有效的方式

我找到了一种通过线程id获取对话所有消息的方法,因此我可以只获取两条消息之间的消息,而不获取其他消息:

 Uri uri = Uri.parse("content://sms/");
 cursor = contentResolver.query(uri, null, "thread_id=" + value, null, "date asc");

有一个名为“type”的列显示消息是传入的还是传出的,因此传入消息显示属于联系人的部分对话,传出消息显示我的部分对话,我认为这是一种有效的方式

但是我想阅读我和我点击的联系人之间的所有消息,我的意思是,对于spessial thread_id,我想你的代码正在阅读所有消息。我已经多次看到此代码,但我不想将发送和接收的消息分开。你为什么不尝试提供你在问题中提供的条件和此答案?这不会有什么区别吗?但我想阅读我和我点击的联系人之间的所有消息,我的意思是,对于spessial thread_id,我认为您的代码正在读取所有消息。我已多次看到此代码,但我不想将发送和接收的消息分开。为什么不尝试提供您在问题中提供的条件和此答案?这不会有什么不同吗?