使用ContentProvider查詢短信,希望可以在ContentResolver.query中使用Group By ,發(fā)現(xiàn)系統(tǒng)并沒有提供接口或者可用字段。
探究竟
首先我們來看看query函數(shù):
public final Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { return query(uri, projection, selection, selectionArgs, sortOrder, null ); }
最有可能可以處理的地方就是selection,我們首先嘗試設(shè)置
selection = "gourp by thread_id"
執(zhí)行程序,從錯(cuò)誤日志中發(fā)現(xiàn),sql語句經(jīng)過編譯處理加上了括號(hào),像下面這樣:
SELECT _id, thread_id, address, person, body, date FROM sms WHERE (type=1) AND (group by thread_id) ORDER BY date DESC
看來要最終得到正確的sql語句,selection的設(shè)置需要有技巧性一些。再嘗試
selection = "0=0) group by (thread_id"
,這次成功了!主要是注意括號(hào)的處理,以及AND后面必須有一個(gè)查詢條件,這里我們使用了
0=0
(此處驗(yàn)證
0==0
亦可)這個(gè)永真查詢只是為了保證sql語句的正確性。
最后處理效果如下:
Uri SMS_PROVIDER = Uri.parse("content://sms/inbox" ); String[] projection = new String[] { "_id", "thread_id", "address" , "person", "body", "date" }; Cursor cursor = context.getContentResolver().query(SMS_PROVIDER, projection, "0=0) group by (thread_id", null , "date desc");
這樣,經(jīng)過編譯處理之后的sql語句為:
SELECT _id, thread_id, address, person, body, date FROM sms WHERE (type=1) AND (0=0)group by (thread_id) ORDER BY date DESC
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
