Intereting Posts
Настройка вкладок ActionBar на Android 4 Как реализовать простую архитектуру REST и ContentProvider с помощью моделей? Ресурсы Catalan и Basque в Android Как сериализовать пакет? Как использовать isInEditMode (), чтобы увидеть макет с пользовательским представлением в редакторе Android: индикатор выполнения в заголовке окна не отображается Как играть в GIF в android Ошибка со списком активности с запущенным устройством для обработки желе (SPAN_EXCLUSIVE_EXCLUSIVE spans не может иметь нулевую длину) Как добавить TextView над FloatingActionButton в Android Переименование файла во внутреннем хранилище Android fragment addToBackStack (null): как добавить один и тот же фрагмент в стек всего один раз? Как создать иерархию файлов в каталоге Androids / data / data / pkg / files? Часы LG G не отображают 32-разрядные изображения или градиенты с полной глубиной цвета Средство просмотра иерархии не вычисляет Measure, Layout, Draw и показывает недоступно Создание нескольких страниц PDF с помощью android.graphics.pdf

Читать все SMS от конкретного отправителя

Как мне прочитать все SMS-сообщения от конкретного отправителя? Например, я хочу сканировать a) тело и b) дату / время всех SMS-сообщений, которые пришли с «TM-MYAMEX» на телефон.

Некоторые веб-сайты, похоже, указывают, что это можно прочитать из «content: // sms / inbox». Я не мог понять, как именно. Также не уверен, поддерживается ли это на большинстве телефонов. Я использую Galaxy S2.

Solutions Collecting From Web of "Читать все SMS от конкретного отправителя"

Попробуйте вот так:

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='123456789'", 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()); } 

AndroidManifest.xml:

 <uses-permission android:name="android.permission.READ_SMS" /> 
  protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); inbox = (Button) findViewById(R.id.inbox); list = (ListView) findViewById(R.id.list); arlist = new ArrayList<String>(); inbox.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Uri inboxUri = Uri.parse("content://sms/inbox"); String[] reqCols = {"_id", "body", "address"}; ContentResolver cr = getContentResolver(); Cursor cursor = cr.query(inboxUri, reqCols, "address='+919456'", null, null); adapter = new SimpleCursorAdapter(getApplicationContext(), R.layout.msg_content_layout, cursor, new String[]{"body", "address"}, new int[]{R.id.txt1, R.id.txt2}); list.setAdapter(adapter); } }); } 

Здесь я добавил число +919456 в качестве значения поля адреса.

Помимо этого вам нужно добавить разрешение READ_SMS для манифеста:

Попробуйте это, это простой способ для чтения сообщения из почтового ящика.

 public class ReadMsg extends AppCompatActivity { ListView listView; private static final int PERMISSION_REQUEST_READ_CONTACTS = 100; ArrayList smsList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_read_msg); listView = (ListView)findViewById(R.id.idList); int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_SMS); if (permissionCheck == PackageManager.PERMISSION_GRANTED){ showContacts(); }else{ ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_SMS},PERMISSION_REQUEST_READ_CONTACTS); } } private void showContacts() { Uri inboxURI = Uri.parse("content://sms/inbox"); smsList = new ArrayList(); ContentResolver cr = getContentResolver(); Cursor c = cr.query(inboxURI,null,null,null,null); while (c.moveToNext()){ String Number = c.getString(c.getColumnIndexOrThrow("address")).toString(); String Body= c.getString(c.getColumnIndexOrThrow("body")).toString(); smsList.add("Number: "+ Number + "\n" + "Body: "+ Body ); } c.close(); ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, smsList); listView.setAdapter(adapter); } 

}

Добавьте это разрешение в Manifests.

 <uses-permission android:name="android.permission.READ_SMS"></uses-permission> 
 public class SmsController extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { SmsMessage msgs[] = null; Bundle bundle = intent.getExtras(); try { Object pdus[] = (Object[]) bundle.get("pdus"); msgs = new SmsMessage[pdus.length]; for (int n = 0; n < pdus.length; n++) { byte[] byteData = (byte[]) pdus[n]; msgs[n] = SmsMessage.createFromPdu(byteData); } } catch (Exception e) { } for (int i = 0; i < msgs.length; i++) { String message = msgs[i].getDisplayMessageBody(); if (message != null && message.length() > 0) { String from = msgs[i].getOriginatingAddress(); if(FROM.contains("TM-MYAMEX")){ String body = message ; Date datetime = new Date() ; } } } } } } 

Я не уверен, что означает «TM-MYAMEX», но вот код для получения всех SMS .

Date = new Date() beacause из-под BroadcastReceiver после чего вы получите сообщение о текущем времени.

Надеюсь, эта помощь.

Вы можете сделать это в нескольких строках кода

 String[] phoneNumber = new String[] { "+923329593103" }; Cursor cursor1 = getContentResolver().query(Uri.parse("content://sms/inbox"), new String[] { "_id", "thread_id", "address", "person", "date","body", "type" }, "address=?", phoneNumber, null); StringBuffer msgData = new StringBuffer(); if (cursor1.moveToFirst()) { do { for(int idx=0;idx<cursor1.getColumnCount();idx++) { msgData.append(" " + cursor1.getColumnName(idx) + ":" + cursor1.getString(idx)); } } while (cursor1.moveToNext()); } else { edtmessagebody.setText("no message from this contact"+phoneNumber); }