Как прочитать содержание нового сообщения в приходящем сообщении в Android? - PullRequest
19 голосов
/ 15 февраля 2011

Я хочу прочитать тело сообщения нового входящего 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(); 

Ответы [ 5 ]

22 голосов
/ 15 февраля 2011

Я разместил несколько примеров программ на этом сайте.Вот пример Прочитать пример 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");
5 голосов
/ 17 июня 2011

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

<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));
1 голос
/ 04 мая 2017

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

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

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

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

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

0 голосов
/ 17 декабря 2013
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));
     }
}
0 голосов
/ 10 декабря 2012

Здесь, в этом примере, я покажу вам, как читать последние полученные (входящие) смс из входящих сообщений и показывать их в текстовом виде.

 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();
    }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...