I have successfully retrieved all messages from inbox but I want only unread messages . I have also apply in the query as read=0
which gives unread SMS but it can’t retrive unread messages it retrieves all messages.
public ArrayList<Message> fetchInboxSms(int type) { ArrayList<Message> smsInbox = new ArrayList<Message>(); Uri uriSms = Uri.parse("content://sms"); SimpleDateFormat formatter1 = new SimpleDateFormat("dd/MM/yyyy"); Calendar calendar2 = Calendar.getInstance(); calendar2.setTimeInMillis(System.currentTimeMillis()-ONE_DAYS_MILIS); Date finaldate2 = calendar2.getTime(); String date3 = formatter1.format(finaldate2); @SuppressLint("Recycle") Cursor cursor = this.getContentResolver() .query(uriSms, new String[] { "_id", "address", "date", "body", "type", " read = 0 " }, "type=" + type, null, "date" + " COLLATE LOCALIZED ASC"); if (cursor != null) { cursor.moveToLast(); if (cursor.getCount() > 0) { do { Message message = new Message(); message.messageNumber = cursor.getString(cursor .getColumnIndex("address")); //message.messageContent = cursor.getString(cursor.getColumnIndex("date")); String date = cursor.getString(cursor.getColumnIndex("date")); String content = cursor.getString(cursor.getColumnIndex("body")); message.messageContent = content; smsInbox.add(message); } while (cursor.moveToPrevious()); } } return smsInbox; }
Advertisement
Answer
Change your query arguments like this
Cursor cursor = this.getContentResolver() .query(uriSms, new String[]{"_id", "address", "date", "body", "type"}, " read = 0 AND type = " + type, null, "date" + " COLLATE LOCALIZED ASC");
You are passing selection where clause for read = 0 in projections instead of where clause.
This is how you can pass multiple where/selection clause.