我怎样才能获得短信主体并从中提取内容?

时间:2016-03-16 06:03:33

标签: android sms android-broadcast inbox android-broadcastreceiver

我尝试了以下代码,

       Uri inboxURI = Uri.parse("content://sms/inbox");

        // List required columns
        String[] reqCols = new String[] { "_id", "address", "body", "date" };
        ContentResolver cr = getContentResolver();

        Calendar cal = Calendar.getInstance();
        Long currentDate = cal.getTimeInMillis();
        cal.add(Calendar.HOUR, -1);
        Long lastDate = cal.getTimeInMillis();
        String criteria = "date between '" + lastDate + "' and '" + currentDate + "'";

        Cursor c = cr.query(inboxURI, reqCols, criteria, null, null);
        adapter = new SimpleCursorAdapter(this, R.layout.row, c,new String[] { "body", "address", "date" }, new int[] {
                        R.id.lblMsg, R.id.lblNumber, R.id.lblDate });
        lvMsg.setAdapter(adapter);

我在这里收到过去1小时内收到的短信。

我想通过内容进行更多过滤,以便尝试以下内容,

String criteria = "(body like '%spent%' or body like '%withdrawn%') " +
                "and date between '" + lastDate + "' and '" + currentDate + "'";

现在我收到了相应的短信。但我想得到花费/撤回的金额。  例如:我的短信如下

Rs.350.50 was spent oun your Credit card on XXXXXX at XXXX. Avl bal: Rs.35200.05

我想提取350.50

所以这就是我想从每条短信中花费/取出的所有金额。

我怎样才能实现这个目标?

1 个答案:

答案 0 :(得分:0)

你可以做这样的事情来获得金额。首先从字符串中获取整数索引,如此

 String s = new String("xyz123");
Matcher matcher = Pattern.compile("\\d+").matcher(s);
matcher.find();
int i = Integer.valueOf(matcher.group());

然后在获得第一个整数的索引之后,您可以运行循环检查下一个字符是否为数字。当你发现第一个非数字字符退出循环。所以现在你有数量的开始和结束指数。现在您可以轻松使用 String.substring(int startIndex,int endIndex)方法正确查找确切数量