Guardar sms en base de datos

295 views
Skip to first unread message

Bladimir Simoza

unread,
Sep 4, 2013, 5:01:34 PM9/4/13
to desarrollad...@googlegroups.com
Estoy desarrollando una aplicacion que guarda los sms en una base de datos particular llamada agenda. En ella hay un tabla llamada mensajessms. La bd es creada por otra clase junto con la tabla y sus campos respectivos.  Pero no logro guardar los sms y no logro detectar el error. El codigo es el siguiente:
package com.imaginagroup.serviceboot;

import java.sql.Date;
import java.text.SimpleDateFormat;

import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;
import android.widget.Toast;

public class ReceptorSMS extends BroadcastReceiver {
    // All available column names in SMS table
    // [_id, thread_id, address,
    // person, date, protocol, read,
    // status, type, reply_path_present,
    // subject, body, service_center,
    // locked, error_code, seen]
    private SQLiteDatabase baseDatos;
    private static final String TAG = "bdagenda";
    private static final String nombreBD = "Agenda";
    public static final String SMS_EXTRA_NAME = "pdus";
    public static final String SMS_URI = "content://com.imaginagroup.serviceboot/databases/agenda/mensajessms";
   
    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;
    private static final String tablaSMS = "mensajessms";    
  
   
    // Change the password here or give a user possibility to change it
  
   
    public void onReceive( Context context, Intent intent )
    {
        Intent in = new Intent(context, Base.class);
        in.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(in);
        // Get SMS map from Intent
        Bundle extras = intent.getExtras();
       
        String messages = "";
       
        if ( extras != null )
        {
            // Get received SMS array
            Object[] smsExtra = (Object[]) extras.get( SMS_EXTRA_NAME );
           
            // Get ContentResolver object for pushing encrypted SMS to incoming folder
            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";
               
                // Here you can add any your code to work with incoming SMS
                // I added encrypting of all received SMS
               
                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 )
    {
       
        // Create SMS row
       
        Date fecha = new Date(0, 0, 0);
        SimpleDateFormat formateador = new SimpleDateFormat("dd-MM-yyyy");
        formateador.format(fecha);
        String fechahoy = formateador.format(fecha);
       
        Date hora = new Date(0, 0, 0);
        SimpleDateFormat formateador1 = new SimpleDateFormat("hh:mm:ss");
        formateador1.format(hora);
        String momento = formateador1.format(hora);
       
        ContentValues values1 = new ContentValues();
        values1.put("nombre", "");
        values1.put("telefono", sms.getOriginatingAddress());
        values1.put("fecha", fechahoy);
        values1.put("hora", momento);
        values1.put("sms", sms.getMessageBody().toString());
       
        contentResolver.insert( Uri.parse( SMS_URI ), values1 );  
                   
       
    }
}
 Gracias de antemano.

Gabriel Pozo

unread,
Sep 5, 2013, 8:53:46 AM9/5/13
to desarrollad...@googlegroups.com
Primero, capturas correctamente los SMS con ese Receiver? En otras palabras, el objeto sms contiene los datos del mensaje?
Podrías colocar algunos logs y ver la salida en el Logcat. También como esta configurado el receiver en el manifest en caso de no recibir nada :D


2013/9/4 Bladimir Simoza <cardi...@gmail.com>

--
Para participar es necesario que leas detenidamente las normas del grupo: http://goo.gl/20KhL
---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a desarrolladores-a...@googlegroups.com.
Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android.
Para ver este debate en la Web, visita https://groups.google.com/d/msgid/desarrolladores-android/c8120343-7023-47c5-b17d-aaeb7fc9cf2c%40googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.



--
Saludos, Gabriel

http://aprendiendodeandroidymas.com/

Gabriel Pozo

unread,
Sep 5, 2013, 3:09:09 PM9/5/13
to desarrollad...@googlegroups.com
Hola Bladimir, primero acordate de responder a la lista no solo a mi, así el resto te puede seguir ayudando ;)

Entonces, no tiene nada que ver con el SMS, pudiste guardar algo en la base de datos? Cualquier dato, pone logs en la función que usas para guardar, la URI es correcta?




El 5 de septiembre de 2013 15:43, Bladimir Simoza <cardi...@gmail.com> escribió:
Si el SMS es mostrado con todos los datos requeridos en un Toast. El asunto es que quiero guardarlo en una base de datos propia pero no hallo como.


2013/9/4 Bladimir Simoza <cardi...@gmail.com>
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a desarrolladores-android+unsub...@googlegroups.com.

Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android.
Para ver este debate en la Web, visita https://groups.google.com/d/msgid/desarrolladores-android/c8120343-7023-47c5-b17d-aaeb7fc9cf2c%40googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.
Reply all
Reply to author
Forward
0 new messages