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.