【问题标题】:I want to fetch and view sms conversations?我想获取和查看短信对话?
【发布时间】:2011-10-25 13:04:15
【问题描述】:
ContentResolver cr = getContentResolver();
Cursor cur = cr.query(Uri.parse("content://sms/conversations/"), null,null,null, null);     

为什么不工作?

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

已添加权限。

08-12 10:56:39.188: ERROR/AndroidRuntime(377): Caused by: android.database.sqlite.SQLiteException: near ",": syntax error: , while compiling: SELECT , body AS snippet FROM sms, (SELECT thread_id AS group_thread_id, MAX(date)AS group_date,COUNT(*) AS msg_count FROM sms GROUP BY thread_id) AS groups WHERE (sms.thread_id = groups.group_thread_id AND sms.date =groups.group_date)
08-12 10:56:39.188: ERROR/AndroidRuntime(377):     at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:143)
08-12 10:56:39.188: ERROR/AndroidRuntime(377):     at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:111)
08-12 10:56:39.188: ERROR/AndroidRuntime(377):     at android.content.ContentProviderProxy.bulkQuery(ContentProviderNative.java:279)
08-12 10:56:39.188: ERROR/AndroidRuntime(377):     at android.content.ContentProviderProxy.query(ContentProviderNative.java:298)
08-12 10:56:39.188: ERROR/AndroidRuntime(377):     at android.content.ContentResolver.query(ContentResolver.java:152)
08-12 10:56:39.188: ERROR/AndroidRuntime(377):     at com.GetMessages.GetConversations$FetchData.doInBackground(GetConversations.java:33)
08-12 10:56:39.188: ERROR/AndroidRuntime(377):     at com.GetMessages.GetConversations$FetchData.doInBackground(GetConversations.java:1)
08-12 10:56:39.188: ERROR/AndroidRuntime(377):     at android.os.AsyncTask$2.call(AsyncTask.java:185)
08-12 10:56:39.188: ERROR/AndroidRuntime(377):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:256)

【问题讨论】:

    标签: android


    【解决方案1】:

    您可以获取短信收件箱:

    Uri mSmsinboxQueryUri = Uri.parse("content://sms/inbox");
    Cursor cursor1 = getContentResolver().query(mSmsinboxQueryUri,new String[] { "_id", "thread_id", "address", "person", "date","body", "type" }, null, null, null);
    startManagingCursor(cursor1);
    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");
    

    您也可以通过彩信做到这一点,也可以通过 URI:

    RECEIVED_MMS_CONTENT_URI = "content://mms/inbox";
    SENT_MMS_CONTENT_URI = "content://mms/sent";
    

    对于 SMS-MMS 两者:

    Uri uri = Uri.parse("content://mms-sms/conversations/");
    

    【讨论】:

    • 如何在不使用已弃用的startManagingCursor() 的情况下做到这一点?
    【解决方案2】:

    终于得到了我需要的东西!

    ContentResolver contentResolver = getContentResolver();
    final String[] projection = new String[]{"*"};
    Uri uri = Uri.parse("content://mms-sms/conversations/");
    Cursor query = contentResolver.query(uri, projection, null, null, null);
    

    【讨论】:

      【解决方案3】:

      我不确定,我还没有尝试过,但我认为这可能是你的工作。

      Uri uriSms = Uri.parse("content://sms/inbox");
      Cursor c = getContentResolver().query(uriSms, null,null,null,null); 
      

      我之前从这个答案中找到了这个:How to delete an SMS from the inbox in Android programmatically?

      【讨论】:

      • @但这只显示收到的消息而不是发送的一次..我需要知道为什么我对对话表的查询没有运行?因为它包含两者
      【解决方案4】:
      String[] projection = {"thread_id", "MAX(date)", "COUNT(*) AS msg_count", "body"};
      Cursor cursor = getContentResolver().query(Telephony.Sms.CONTENT_URI, projection, "thread_id) GROUP BY (thread_id", null, null);
      

      【讨论】:

        【解决方案5】:

        此功能用于获取对话

        private void getSMSCOnversationlist() {
            Uri SMS_INBOX = Uri.parse("content://sms/conversations/");
            Cursor c = getActivity().getContentResolver().query(SMS_INBOX, null,null, null, "date desc");
        
            String[] count = new String[c.getCount()];
            String[] snippet = new String[c.getCount()];
            String[] thread_id = new String[c.getCount()];
        
        
            c.moveToFirst();
            for (int i = 0; i < c.getCount(); i++) {
        
                 count[i] = c.getString(c.getColumnIndexOrThrow("msg_count")).toString();
                thread_id[i] = c.getString(c.getColumnIndexOrThrow("thread_id")).toString();
                snippet[i] = c.getString(c.getColumnIndexOrThrow("snippet")).toString();
                Toast.makeText(getActivity(), count[i] + " - " + thread_id[i] + " - " + snippet[i]+ " - " , Toast.LENGTH_LONG).show();
                c.moveToNext();
        
            }
            c.close();
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-09-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-04-11
          相关资源
          最近更新 更多