últimos voz que para notificaciones muéstrame mis mensajes los leer lector lea las hatomico hacer hable habladas google como app alta android sms

android - voz - ok google leer whatsapp



Lea los mensajes de la bandeja de entrada de un número particular y muéstrelos en una actividad (4)

Estoy tratando de leer los mensajes de una bandeja de entrada y mostrarlos en una actividad. Mi actividad contiene un botón y una vista de lista. Cuando hago clic en el botón, se muestran todos los mensajes de la bandeja de entrada. Pero mi requisito es que necesito ver mensajes de un número particular. Mi aplicación no se está ejecutando cuando recibo mensajes de ese número cuando hago clic en el botón de clic, solo se deben actualizar los mensajes específicos (asociados con un número en particular). Aquí está el código relevante.

myActivity.java:

public class SecureMessagesActivity extends Activity implements OnClickListener, OnItemClickListener { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setTheme( android.R.style.Theme_Light ); setContentView(R.layout.main); this.findViewById( R.id.UpdateList ).setOnClickListener( this ); } ArrayList<String> smsList = new ArrayList<String>(); public void onItemClick( AdapterView<?> parent, View view, int pos, long id ) { try { String[] splitted = smsList.get( pos ).split("/n"); String sender = splitted[0]; String encryptedData = ""; for ( int i = 1; i < splitted.length; ++i ) { encryptedData += splitted[i]; } String data = sender + "/n" + StringCryptor.decrypt( new String(SmsReceiver.PASSWORD), encryptedData ); Toast.makeText( this, data, Toast.LENGTH_SHORT ).show(); } catch (Exception e) { e.printStackTrace(); } } public void onClick( View v ) { ContentResolver contentResolver = getContentResolver(); Cursor cursor = contentResolver.query( Uri.parse( "content://sms/inbox" ), null, null, null, null); int indexBody = cursor.getColumnIndex( SmsReceiver.BODY ); int indexAddr = cursor.getColumnIndex( SmsReceiver.ADDRESS ); if ( indexBody < 0 || !cursor.moveToFirst() ) return; smsList.clear(); do { String str = "Sender: " + cursor.getString( indexAddr ) + "/n" + cursor.getString( indexBody ); smsList.add( str ); } while( cursor.moveToNext() ); ListView smsListView = (ListView) findViewById( R.id.SMSList ); smsListView.setAdapter( new ArrayAdapter<String>( this, android.R.layout.simple_list_item_1, smsList) ); smsListView.setOnItemClickListener( this ); } }

SmsReceiver.java:

public class SmsReceiver extends BroadcastReceiver { public static final String SMS_EXTRA_NAME = "pdus"; public static final String SMS_URI = "content://sms"; public static final String ADDRESS = "address"; public static final String PERSON = "person"; public static final String DATE = "date"; public static final String READ = "read"; public static final String STATUS = "status"; public static final String TYPE = "type"; public static final String BODY = "body"; public static final String SEEN = "seen"; public static final int MESSAGE_TYPE_INBOX = 1; public static final int MESSAGE_TYPE_SENT = 2; public static final int MESSAGE_IS_NOT_READ = 0; public static final int MESSAGE_IS_READ = 1; public static final int MESSAGE_IS_NOT_SEEN = 0; public static final int MESSAGE_IS_SEEN = 1; public static final byte[] PASSWORD = new byte[]{ 0x20, 0x32, 0x34, 0x47, (byte) 0x84, 0x33, 0x58 }; public void onReceive( Context context, Intent intent ) { Bundle extras = intent.getExtras(); String messages = ""; if ( extras != null ) { Object[] smsExtra = (Object[]) extras.get( SMS_EXTRA_NAME ); ContentResolver contentResolver = context.getContentResolver(); for ( int i = 0; i < smsExtra.length; ++i ) { SmsMessage sms = SmsMessage.createFromPdu((byte[])smsExtra[i]); String body = sms.getMessageBody().toString(); String address = sms.getOriginatingAddress(); messages += "SMS from " + address + " :/n"; messages += body + "/n"; putSmsToDatabase( contentResolver, sms ); } // Display SMS message Toast.makeText( context, messages, Toast.LENGTH_SHORT ).show(); } // WARNING!!! // If you uncomment next line then received SMS will not be put to incoming. // Be careful! // this.abortBroadcast(); } private void putSmsToDatabase( ContentResolver contentResolver, SmsMessage sms ) { ContentValues values = new ContentValues(); values.put( ADDRESS, sms.getOriginatingAddress() ); values.put( DATE, sms.getTimestampMillis() ); values.put( READ, MESSAGE_IS_NOT_READ ); values.put( STATUS, sms.getStatus() ); values.put( TYPE, MESSAGE_TYPE_INBOX ); values.put( SEEN, MESSAGE_IS_NOT_SEEN ); try { String encryptedPassword = StringCryptor.encrypt( new String(PASSWORD), sms.getMessageBody().toString() ); values.put( BODY, encryptedPassword ); } catch ( Exception e ) { e.printStackTrace(); } // Push row into the SMS table contentResolver.insert( Uri.parse( SMS_URI ), values ); } }


Intenta este código obtienes sms por número pertucular:

import java.util.ArrayList; import android.app.Activity; import android.content.ContentResolver; import android.content.Context; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.util.Log; public class MainActivity extends Activity { ArrayList<String> sms_id = new ArrayList<String>(); ArrayList<String> sms_num = new ArrayList<String>(); ArrayList<String> sms_Name = new ArrayList<String>(); ArrayList<String> sms_dt = new ArrayList<String>(); ArrayList<String> sms_body = new ArrayList<String>(); // private ImageView imageView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Uri myMessage = Uri.parse("content://sms/"); ContentResolver cr = this.getContentResolver(); Cursor c = cr.query(myMessage, new String[] { "_id", "address", "date", "body", "read" }, "address = ''+9180009''", null, null); startManagingCursor(c); getSmsLogs(c, MainActivity.this); } public void getSmsLogs(Cursor c, Context con) { if (sms_num.size() > 0) { sms_id.clear(); sms_num.clear(); sms_Name.clear(); sms_body.clear(); sms_dt.clear(); } try { if (c.moveToFirst()) { do { if (c.getString(c.getColumnIndexOrThrow("address")) == null) { c.moveToNext(); continue; } String Number = c.getString( c.getColumnIndexOrThrow("address")).toString(); String _id = c.getString(c.getColumnIndexOrThrow("_id")) .toString(); String dat = c.getString(c.getColumnIndexOrThrow("date")) .toString(); String Body = c.getString(c.getColumnIndexOrThrow("body")) .toString(); Log.e("Body-->", "" + Body); sms_id.add(_id); sms_num.add(Number); sms_body.add(Body); } while (c.moveToNext()); } c.close(); } catch (Exception e) { e.printStackTrace(); } } }

verifique el registro de sms body: tiene que usar el siguiente permiso

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


Si desea leer mensajes solo de un número en particular, necesita filtrar sus datos de alguna manera.

Este ejemplo filtra el cursor y lo ordena.

selection = "_id = " + 15; Cursor curSms = context.getContentResolver().query(smsUri, null, selection, null, "date ASC");


agregue una declaración if en su bucle para que coincida con el número seleccionado

String selectedNumber; // copy the selected number to selectedNumber do { if(cursor.getString( indexAddr ).equals(selectedNumber)) { String str = "Sender: " + cursor.getString( indexAddr ) + "/n" + cursor.getString( indexBody ); smsList.add( str ); } } while( cursor.moveToNext() );

Aquí solo los mensajes del número que coincida con el número seleccionado se agregarán a smsList. Es una pregunta antigua, pero espero que sea útil para alguien.


public class IncomingSms extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { final Bundle bundle = intent.getExtras(); try { if (bundle != null) { final Object[] pdusObj = (Object[]) bundle.get("pdus"); for (int i = 0; i < pdusObj .length; i++) { SmsMessage currentMessage = SmsMessage.createFromPdu((byte[])pdusObj[i]); String phoneNumber = currentMessage.getDisplayOriginatingAddress(); String senderNum = phoneNumber ; String message = currentMessage .getDisplayMessageBody(); try { if (senderNum .equals("TA-DOCOMO")) { Otp Sms = new Otp(); Sms.recivedSms(message ); } } catch(Exception e){} } } } catch (Exception e) { } } }

Para obtener más información, haga clic aquí http://androiddhina.blogspot.in/2015/06/reading-incoming-message-automatically-to-verify-OTP.html