Столбец адреса содержит номер телефона отправителя смс.
Используйте cursor.getString (cursor.getColumnIndex ("адрес")), чтобы получить номер телефона в виде строки. Поместите курсор на content: // sms и отсортируйте его в порядке убывания даты, чтобы получить самое последнее сообщение. Вам придется ждать, пока новое сообщение не войдет в таблицу, иначе вы извлечете информацию из неправильного сообщения. Во входящем SMSScastReceiver используйте цикл while, в потоке, опрашивая курсор. GetCount () для изменения. Затем через цикл while cursor.moveToFirst будет новое сообщение.
Например:
Cursor cur = getContentResolver().query(Uri.parseUri(content://sms), null, null, null, null);
int count = cur.getCount();
while (cur.getCount() == count)
{
Thread.sleep(1000);
cur = getContentResolver().query(Uri.parseUri(content://sms), null, null, null, null);
}
Тогда получите адрес отправителя смс:
cur = getContentResolver().query(Uri.parseUri(content://sms), null, null, null, "date DESC");
cur.MoveToFirst();
String telephoneNumber = cur.getString(cur.getColumnIndex("address");
Этот цикл while приостанавливает поток, пока не прибудет новое сообщение. Вы также можете использовать contentObserver, но этот цикл while прост и не требует регистрации, отмены регистрации и отдельного класса.
Честно говоря, я думаю, что быстрее получить адрес и текст сообщения непосредственно из pdu входящего намерения. Таким образом, вам не нужно ждать, пока сообщение войдет в таблицу, чтобы получить адрес и тело. Класс Android SmsMessage имеет множество полезных методов.