仅在 5 分钟前获取收件箱短信

Get Only Before 5 Minutes Inbox SMS

我只想 select 单击按钮时只收到最新的收件箱短信。这是我的代码。

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

这是我获取短信的函数。

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

我可以通过此代码获取所有收件箱短信,但我想 select 仅在 5 分钟之前收到收件箱短信。我是 android 个应用程序的新手。

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.

如您所见,您可以指定选择行的条件。

首先获取当前日期时间。

Calendar date = Calendar.getInstance();
long t = date.getTimeInMillis();

然后从当前时间减去 5 分钟。

static final long ONE_MINUTE_IN_MILLIS = 60000;
Date afterSubtractingFiveMins = new Date(t - (5 * ONE_MINUTE_IN_MILLIS));

现在创建过滤器并查询消息。

String filter = "date>=" + afterSubtractingFiveMins.getTime();

Cursor cursor = getContentResolver().query(uriSms, new String[]{"_id", "address", "date", "body"},filter,null,null);

PS: 我没有检查代码。您可能需要优化。