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

时间:2017-02-18 05:22:05

标签: android android-sms

我想在按钮点击时仅选择最新的收件箱短信。这是我的代码。

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

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

1 个答案:

答案 0 :(得分:1)

Cursor cursor = getContentResolver().query (Uri uri, 
                String[] projection, 
                String selection, 
                String[] selectionArgs, 
                String sortOrder)
  

选择:声明要返回哪些行的过滤器。传递null将   返回给定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:我没有检查代码。您可能需要进行优化。