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

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