I want to select only latest inbox SMS on button click. Here is my code.
btnGet = (Button) findViewById(R.id.btnGet);
btnGet.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
if (fetchInbox() != null) {
ArrayList sms1 = fetchInbox();
for (int i = 0; i < sms1.size(); i++) {
String st = sms1.get(i).toString();
String[] sArr = st.split("\\$");
mobile = sArr[0];
sms = sArr[1];
useGet(mobile, sms);
}
} else {
textView1.setText("no sms");
}
} catch (Exception ex) {
textView1.setText("Exception" + ex.getMessage());
}
}
});
And here is my function to fetch SMS.
public ArrayList fetchInbox()
{
ArrayList sms = new ArrayList();
Uri uriSms = Uri.parse("content://sms/inbox");
Cursor cursor = getContentResolver().query(uriSms, new String[]{"_id", "address", "date", "body"},null,null,null);
cursor.moveToFirst();
while (cursor.moveToNext()) {
String id = cursor.getString(0);
String address = cursor.getString(1);
String body = cursor.getString(3);
sms.add(address + "$" + body + "$" + id);
}
return sms;
}
I am able get all inbox SMS by this code, but I want to select only before 5 minutes inbox SMS. I am new with android apps.
Cursor cursor = getContentResolver().query (Uri uri,
String[] projection,
String selection,
String[] selectionArgs,
String sortOrder)
selection : A filter declaring which rows to return. Passing null will return all rows for the given URI.
As you can see, you can specifies the criteria for selecting rows.
First get the current date time.
Calendar date = Calendar.getInstance();
long t = date.getTimeInMillis();
Then subtract 5 mins from current time.
static final long ONE_MINUTE_IN_MILLIS = 60000;
Date afterSubtractingFiveMins = new Date(t - (5 * ONE_MINUTE_IN_MILLIS));
Now create the filter and query the messages.
String filter = "date>=" + afterSubtractingFiveMins.getTime();
Cursor cursor = getContentResolver().query(uriSms, new String[]{"_id", "address", "date", "body"},filter,null,null);
PS: I didn't check the code. You may have to optimize.