Cómo obtener lista de sms como convesations en cada dispositivo Android 2.2+
Necesito conseguir la lista de mensajes de texto y exhibirlos como en la aplicación común o Go sms pro. Estoy usando código siguiente:
uriSms = Uri.parse("content://mms-sms/conversations"); Cursor cursor = getContentResolver().query(uriSms, new String[] {"*"}, null, null, "date DESC"); cursor.moveToFirst(); do{ try{ String address = cursor.getString(32); if(address == null){ address = ""; //phone number }else{ address = getContactName(address); } String body = cursor.getString(2); System.out.println("======> Mobile number => "+address); System.out.println("=====> SMS Text => "+body); }catch (Exception e) { e.printStackTrace(); } }while(cursor.moveToNext());
Funciona en mi pestaña galaxia (android 2.2) pero en mi aplicación s3 (ICS) se bloquea al inicio. No quiero analizar mms así que intenté usar
- Podría un emulador enviar un SMS a sí mismo
- SMSManager está desactivado
- Envío y recepción de texto mediante el emulador de Android
- Android: ¿Cómo enviar mensajes mediante programación mediante whatsapp, ¿Conversamos?
- Abortar / Cancelar transmisiones
uriSms = Uri.parse("content://sms/conversations");
Pero no funcionó en ambos dispositivos. Busqué mucho en Google para encontrar una solución y no encontré nada. Sólo he descubierto que el acceso a las conversaciones sms depende de Android y el dispositivo. Mi propósito es hacer la aplicación que apoyan cada dispositivo androide 2.2+. En la aplicación de valores que utilizan Thread.CONTENT_URI para obtener lista de sms como conversaciones, por ejemplo.
Threads.CONTENT_URI.buildUpon().appendQueryParameter("simple", "true").build();
Pero la clase Thread no se proporciona con el código fuente y no puedo encontrarlo en Internet. ¿Qué puedo hacer para que mi aplicación se ejecute en todos los dispositivos Android (2.2+) como Handcent Sms o GO sms pro.
- Volver a Actividad después de completar la acción en Android?
- Inicie sms Actividad @ ConversarionList.class de mi propia aplicación
- Android: detecta SMS saliente, cuenta incorrecta
- Opción para enviar sms utilizando Sim1 o Sim2 mediante programación
- Recuperación de mensajes SMS desde Inbox
- BroadcastReceiver para SMS de varias partes
- ¿Cómo pasar datos a BroadcastReceiver?
- El envío de SMS mediante Intent no incluye destinatarios en algunos dispositivos
Su código se está bloqueando porque está suponiendo que la tabla consultada contiene una columna denominada address
, en la que no todas las versiones de android almacenan la dirección en la conversación. Para comprobar la estructura de la tabla puede mostrar sus nombres de columna y contenido a través del siguiente código:
ArrayList<String> conversation = new ArrayList<>(); Uri uri = Uri.parse( "content://sms/conversations/" ); Cursor cursor = getContentResolver().query( uri, null, null ,null, null ); startManagingCursor( cursor ); if( cursor.getCount() > 0 ) { String count = Integer.toString( cursor.getCount() ); while( cursor.moveToNext() ) { String result = ""; for( int i = 0; i < cursor.getColumnCount(); i++ ) { result = result + "\nindex " + i + "\n column is " + cursor.getColumnName( i ) + "\nvalue is " + cursor.getString( i ); } result = result + "\n new conversation"; conversation.add( result ); } } cursor.close();
Una posible solución es utilizar el thread_id
como un parámetro para buscar la dirección de la siguiente manera:
ArrayList<String> conversation = new ArrayList<>(); // We may use sms/sent or sms/inbox Uri uri = Uri.parse( "content://sms" ); Cursor cursor = getContentResolver().query( uri, null, "thread_id" + " = " + threadId ,null, null ); startManagingCursor( cursor ); if( cursor.getCount() > 0 ) { String count = Integer.toString( cursor.getCount() ); while( cursor.moveToNext() ){ String result = ""; for( int i = 0; i < cursor.getColumnCount(); i++ ) { result = result + "\nindex " + i + "\n column is " + cursor.getColumnName( i ) + "\nvalue is " + cursor.getString( i ); } result = result + "\n new conversation"; conversation.add( result ); } } cursor.close();
final StringBuilder msgString = new StringBuilder(); // ************** SMS ********************* List<SMSData> smsList = new ArrayList<SMSData>(); Uri uri = Uri.parse("content://sms/"); Cursor c= getContentResolver().query(uri, null, null ,null,null); //startManagingCursor(c); // Read the sms data and store it in the list if(c.moveToFirst()) { for(int i=0; i < c.getCount(); i++) { SMSData sms = new SMSData(); sms.setBody(c.getString(c.getColumnIndexOrThrow("body")).toString()); sms.setDate(c.getString(c.getColumnIndexOrThrow("date")).toString()); sms.setNumber(c.getString(c.getColumnIndexOrThrow("address")).toString()); smsList.add(sms); String address = c.getString(c.getColumnIndexOrThrow("address")).toString(); String mbody = c.getString(c.getColumnIndexOrThrow("body")).toString(); String mdate = c.getString(c.getColumnIndexOrThrow("date")).toString(); Date dt = new Date(Long.valueOf(mdate)); msgString.append(address + "<-||->"); msgString.append(mbody + "<-||->"); msgString.append(dt + "<-||->"); msgString.append(mdate + "<--!-->"); c.moveToNext(); } } c.close();
- No se puede agregar cruce con cli iónico 1.3.2
- Red intercambiable y proveedores de localización GPS de acuerdo con el estado de gps android