2011-08-12 13 views
15
ContentResolver cr = getContentResolver(); 
Cursor cur = cr.query(Uri.parse("content://sms/conversations/"), null,null,null, null);  

nie działa, dlaczego?Chcę pobierać i wyświetlać wiadomości SMS?

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

uprawnienia zostały dodane.

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) 

Odpowiedz

16

wreszcie to, co potrzebne!

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); 
2

Nie jestem pewien i nie próbowałem jeszcze, ale myślę, że to może być z twojej pracy.

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

znalazłem to wcześniej z tej odpowiedzi: How to delete an SMS from the inbox in Android programmatically?

+0

@but to pokazuje tylko odebranych wiadomości nie wysłał ... i muszę wiedzieć, dlaczego moje zapytanie na temat tabeli rozmów nie działa ?, ponieważ kontatynuje ona zarówno – Harinder

27

Można pobrać skrzynki odbiorczej SMS:

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

można pobrać inne elementy wysłane przez zmianę URI.

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

można zrobić z MMS również z URI:

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

Na SMS-MMS zarówno:

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

Jak można to zrobić bez użycia deprecat ed 'startManagingCursor()'? – HEATH3N

1
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); 
Powiązane problemy