Попытка получить SMS от определенного отправителя

Я пытаюсь получить SMS-сообщение от определенного отправителя, но проблема в том, что у отправителя разные коды, например «VM-Citi» или «AD-Citi». Я хотел бы узнать, возможно ли запрашивать SMS только у отправителя есть что-то вроде ключевого слова, если оно содержит «citi»?

Прямо сейчас я делаю следующее:

Uri uriSMSuri = Uri.parse("content://sms/inbox");
String[] args = new String[]{ "VM-Citibk", "AD-Citibk" };

StringBuilder inList = new StringBuilder(args.length * 2); //for adding the ?
for(int i=0;i<args.length;i++)
{ 
 if (i > 0) 
 { 
   inList.append(","); 
 }
  inList.append("?"); 
}

cursor = getActivity().getContentResolver().query(uriSMSuri,new String[] {"*"}, "address IN ("+inList.toString()+")", args, "date desc");

if(cursor.getCount() > 0 && cursor != null)
{
  while (cursor.moveToNext()) 
  {
    contactName = cursor.getString(cursor.getColumnIndex("address"));
    snippet = cursor.getString(cursor.getColumnIndex("body"));
  }
}

Прямо сейчас у меня есть строка [] args, в которой есть информация об отправителе, но возможно ли иметь аргументы, которые говорят, содержит ли отправитель «citi»?

Возможно ли, если да, то как применить этот формат к аргументам?


person Sanjana Nair    schedule 20.05.2015    source источник
comment
Вы можете BroadcastReceiver прочитать SMS и можете разделить его по своему усмотрению и получить текст в String   -  person Anshul Tyagi    schedule 20.05.2015
comment
@AnshulTyagi: мне это не нужно для текущего сообщения, я хочу использовать его для сообщений, которые уже хранятся в базе данных SMS.   -  person Sanjana Nair    schedule 20.05.2015


Ответы (1)


Вы можете сделать так -

StringBuilder smsBuilder = new StringBuilder();
       final String SMS_URI_INBOX = "content://sms/inbox"; 
        final String SMS_URI_ALL = "content://sms/";  
        try {  
            Uri uri = Uri.parse(SMS_URI_INBOX);  
            String[] projection = new String[] { "_id", "address", "person", "body", "date", "type" };  
            Cursor cur = getContentResolver().query(uri, projection, "address like '%Citi%'", null, "date desc");
             if (cur.moveToFirst()) {  
                int index_Address = cur.getColumnIndex("address");  
                int index_Person = cur.getColumnIndex("person");  
                int index_Body = cur.getColumnIndex("body");  
                int index_Date = cur.getColumnIndex("date");  
                int index_Type = cur.getColumnIndex("type");         
                do {  
                    String strAddress = cur.getString(index_Address);  
                    int intPerson = cur.getInt(index_Person);  
                    String strbody = cur.getString(index_Body);  
                    long longDate = cur.getLong(index_Date);  
                    int int_Type = cur.getInt(index_Type);  

                    smsBuilder.append("[ ");  
                    smsBuilder.append(strAddress + ", ");  
                    smsBuilder.append(intPerson + ", ");  
                    smsBuilder.append(strbody + ", ");  
                    smsBuilder.append(longDate + ", ");  
                    smsBuilder.append(int_Type);  
                    smsBuilder.append(" ]\n\n");  
                } while (cur.moveToNext());  

                if (!cur.isClosed()) {  
                    cur.close();  
                    cur = null;  
                }  
            } else {  
                smsBuilder.append("no result!");  
            } // end if  
            }
        } catch (SQLiteException ex) {  
            Log.d("SQLiteException", ex.getMessage());  
        }  
person Narendra Singh    schedule 20.05.2015
comment
Хм... Значит, я никак не могу напрямую запросить в БД отправителя, у которого есть CITI? - person Sanjana Nair; 20.05.2015
comment
- Извините за задержку! Да. Это работает .. Большое спасибо! Кстати: Будет ли это работать, даже если я поставлю маленькую букву «с»? как Citi, а не Citi - person Sanjana Nair; 21.05.2015