web-dev-qa-db-fra.com

Comment lire le contenu du message d'un nouveau message à venir dans Android?

Je veux lire le corps du message d'un nouveau fichier entrant SMS dans Android, Programmatiquement.

J'ai essayé quelque chose mais cela ne renvoie aucun contenu:

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(); 
20
Krishna

J'ai posté des exemples de programmes à ce sujet sur celui-ci sur mon site Web de classe. Voici l'exemple LIA SMS Exemple Voici un extrait de code. Fondamentalement, vous pouvez enregistrer un récepteur de diffusion pour écouter SMS_Receive et consulter ce qui suit.

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");
22
Frank Sposaro

Vous trouverez ci-dessous la pièce de code qui lisait le message entrant et l'affichage dans la vue de la liste, n'oubliez pas d'ajouter la permission dans le fichier manifeste:

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

Ici le code:

 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));
5
RobinHood

Une solution très facile serait d'utiliser cette SMS Bibliothèque d'analyseurs:

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

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

En utilisant, vous pouvez soit lire le message entier, soit des parties spécifiques du message entrant. Vous pouvez également définir les numéros de téléphone à partir duquel le message arrivera.

Si vous avez besoin de plus d'informations sur la manière dont cela fonctionne ou son utilisation, vérifiez le référentiel GitHub que j'ai énuméré ci-dessus.

1
drilonrecica
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
Irfan Ali

Ici, dans cet exemple, je vais vous montrer que comment lire les SMS récemment reçus (entrants) de la boîte de réception et pour le montrer dans TextView.

 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();
    }
    });
0
Pir Fahim Shah