Как прочитать содержимое сообщения нового в предстоящем сообщении в android?

Кто-нибудь может мне с этим помочь?

Я хочу читать тело сообщения нового входящего SMS в android, программно.

Я пробовал что-то, но это не возвращает никакого содержимого:

Uri uri = Uri.parse("content://sms/inbox"); ContextWrapper context = null; Cursor c = context.getContentResolver().query(uri, null, null ,null,null); String body = null; String number=null; if(c.moveToFirst()) { body = c.getString(c.getColumnIndexOrThrow("body")).toString(); number = c.getString(c.getColumnIndexOrThrow("address")).toString(); } c.close(); 

Является ли их какая-либо ошибка в моем коде. Пожалуйста, дайте мне ответ, пожалуйста, потому что я полностью потерял один месяц за это.

Я опубликовал несколько примеров программ на этом веб-сайте класса. Вот пример Пример чтения SMS. Вот фрагмент кода. В принципе, вы можете зарегистрировать широковещательный приемник для прослушивания SMS_Receive и проверить следующее.

 Intent intent = getIntent(); Bundle bundle = intent.getBundleExtra("mySMS"); if (bundle != null) { Object[] pdus = (Object[])bundle.get("pdus"); SmsMessage sms = SmsMessage.createFromPdu((byte[])pdus[0]); Log.i("mobile.cs.fsu.edu", "smsActivity : SMS is <" + sms.getMessageBody() +">"); //strip flag String message = sms.getMessageBody(); while (message.contains("FLAG")) message = message.replace("FLAG", ""); TextView tx = (TextView) findViewById(R.id.TextBox); tx.setText(message); } else Log.i("mobile.cs.fsu.edu", "smsActivity : NULL SMS bundle"); 

Ниже приведен фрагмент кода, который считывает входящее сообщение и отображается в виде списка, не забудьте добавить разрешение в файл манифеста:

 <uses-permission android:name="android.permission.READ_SMS"/> 

Здесь код:

  listitem=(ListView)findViewById(R.id.ListView); Uri mSmsQueryUri = Uri.parse("content://sms/inbox"); List<String> messages = new ArrayList<String>(); Cursor cursor = null; try { cursor = getContentResolver().query(mSmsQueryUri, null, null, null, null); if (cursor == null) { Log.i(TAG, "cursor is null. uri: " + mSmsQueryUri); } for (boolean hasData = cursor.moveToFirst(); hasData; hasData = cursor.moveToNext()) { final String body = cursor.getString(cursor.getColumnIndexOrThrow("body")); messages.add(body); } } catch (Exception e) { Log.e(TAG, e.getMessage()); } finally { cursor.close(); } listitem.setAdapter(new ArrayAdapter<String>(ReadMessage.this, android.R.layout.simple_list_item_1,messages)); 

Очень простое решение было бы использовать эту библиотеку SMS Parser:

https://github.com/adorsys/sms-parser-android

 compile 'de.adorsys.android:smsparser:0.0.3' 

Используя его, вы можете либо прочитать все сообщение, либо определенные части входящего сообщения. Вы также можете установить номера телефонов, с которых будет поступать сообщение.

Если вам нужна дополнительная информация о том, как она работает или ее использование, проверьте репозиторий github, указанный выше.

В этом примере я продемонстрирую вам, как читать последние полученные (входящие) смс из папки «Входящие» и показывать их в текстовом виде.

  fstmsgBtn.setOnClickListener(new OnClickListener() { public void onClick(View v) { Uri my_uri = Uri.parse("content://sms/inbox"); Cursor readFstSms =v.getContext().getContentResolver().query(my_uri, null, null ,null,null); if(readFstSms.moveToFirst()) { String msg_body = c.getString(c.getColumnIndexOrThrow("body")).toString(); //String sender_number = c.getString(c.getColumnIndexOrThrow("address")).toString(); readtxt.setText(msg_body); } readFstSms.close(); } }); 
 listitem=(ListView)findViewById(R.id.list_view); Uri mSmsQueryUri = Uri.parse("content://sms/inbox"); List<String> messages = new ArrayList<String>(); Cursor cursor = null; try { cursor = getContentResolver().query(mSmsQueryUri, null, null, null, null); if (cursor == null) { // Log.i(TAG, "cursor is null. uri: " + mSmsQueryUri); } for (boolean hasData = cursor.moveToFirst(); hasData; hasData = cursor.moveToNext()) { final String body = cursor.getString(cursor.getColumnIndexOrThrow("body")).toString(); final String sender_no= cursor.getString(cursor.getColumnIndexOrThrow("address")).toString(); final String date= cursor.getString(cursor.getColumnIndexOrThrow("date")); final String type =cursor.getString(cursor.getColumnIndexOrThrow("type")); messages.add(body); messages.add(sender_no); messages.add(date); messages.add(type); } } catch (Exception e) { //Log.e(TAG, e.getMessage()); } finally { cursor.close(); } listitem.setAdapter(new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1,messages)); } }