私の問題は、私の電話がクレジットされていない場合、メソッドが呼び出されないことです。onReceiver()
それから、私の手がかりは、なしで取得する方法ResultCode()
です。onReceiver()
resultCode
enviados.getResultCode()
BroadcastReceiver
これは私のコードです:
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
if (arg1.getAction()==MotionEvent.ACTION_DOWN){
if (arg0.getId()==destinatario.getId()){
finish();
guardaTexto=textoet.getText().toString();
Intent consola = new Intent(this,ListaContactos.class);
consola.putExtra("guardaTexto", guardaTexto);
startActivity(consola);
finish();
return true;
}
else
if (arg0.getId()==enviar.getId()){
t=-1;
s=-1;
manager=SmsManager.getDefault();
final String texto=recibeTexto;
final Intent send = new Intent(SENT);
final PendingIntent
statusEnviado=PendingIntent.getBroadcast(this, 0,send,0);
final Intent delivery = new Intent(DELIVERED);
final PendingIntent statusEntregado
=PendingIntent.getBroadcast(this, 0,delivery,0);
final ArrayList<PendingIntent> sentIntents = new
ArrayList<PendingIntent>();
sentIntents.add(statusEnviado);
final ArrayList<PendingIntent> deliveryIntents = new
ArrayList<PendingIntent>();
deliveryIntents.add(statusEntregado);
enviados=new BroadcastReceiver() {
@Override
public void onReceive(Context contexto,Intent
intento){
t++;
String maximo="";
BaseDeDatos sel=new
BaseDeDatos(Principal_mensajes.this,"administradorDeMensajes", null,18);
SQLiteDatabase
max=sel.getReadableDatabase();
Cursor cursorMax=max.rawQuery("SELECT
max(id) as maximo FROM conversaciones WHERE number='" + number[t] + "'",null);
while (cursorMax.moveToNext()){
maximo =
cursorMax.getString(cursorMax.getColumnIndex(("maximo")));
}
cursorMax.close();
max.close();
sel.close();
switch (getResultCode()){
case Activity.RESULT_OK:
if (address[t].equals("No agendado")){
Toast
enviado=Toast.makeText(contexto,"Mensaje enviado con éxito a " +
number[t],Toast.LENGTH_SHORT);
enviado.show();
}
else
{
Toast enviado=Toast.makeText(contexto,"Mensaje
enviado con éxito a " + address[t],Toast.LENGTH_SHORT);
enviado.show();
}
break;
case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
Toast
noEnviado=Toast.makeText(contexto,"Mensaje no enviado a " + address[t]
,Toast.LENGTH_SHORT);
noEnviado.show();
BaseDeDatos db3=new
BaseDeDatos(Principal_mensajes.this,"administradorDeMensajes", null,18);
SQLiteDatabase
insertar3=db3.getWritableDatabase();
insertar3.execSQL("UPDATE conversaciones SET
estado='errorEnviar' WHERE id='" + maximo + "'" );
insertar3.close();
db3.close();
break;
case SmsManager.RESULT_ERROR_RADIO_OFF:
Toast
sinCobertura=Toast.makeText(contexto,"Sin cobertura de red.El
mensajes será enviado cuando" +
" la red esté
disponible",Toast.LENGTH_LONG);
sinCobertura.show();
BaseDeDatos bd1=new
BaseDeDatos(Principal_mensajes.this,"administradorDeMensajes", null,18);
SQLiteDatabase
modo1=bd1.getWritableDatabase();
ContentValues registro1=new
ContentValues();
registro1.put("tipo","cobertura");
registro1.put("address",address[t]);
registro1.put("number",number[t]);
registro1.put("body",
textoet.getText().toString());
modo1.insert("reportes", null, registro1);
modo1.close();
bd1.close();
BaseDeDatos insert=new
BaseDeDatos(Principal_mensajes.this,"administradorDeMensajes", null,18);
SQLiteDatabase
escribe=insert.getWritableDatabase();
escribe.execSQL("UPDATE conversaciones SET
estado='errorEnviar'WHERE id='" + maximo + "'" );
escribe.close();
insert.close();
Intent servicio = new
Intent(Principal_mensajes.this, servicioEntregaYerror.class);
startService(servicio);
break;
case SmsManager.RESULT_ERROR_NO_SERVICE:
Toast sinServicio=Toast.makeText(contexto,"Sin
servicio.El mensajes será enviado cuando " +
"el servicio esté
disponible",Toast.LENGTH_LONG);
sinServicio.show();
BaseDeDatos bd2=new
BaseDeDatos(Principal_mensajes.this,"administradorDeMensajes", null,18);
SQLiteDatabase
modo2=bd2.getWritableDatabase();
ContentValues registro2=new
ContentValues();
registro2.put("tipo","servicio");
registro2.put("address",address[t]);
registro2.put("number",number[t]);
registro2.put("body",
textoet.getText().toString());
modo2.insert("reportes", null, registro2);
modo2.close();
bd2.close();
BaseDeDatos insert2=new
BaseDeDatos(Principal_mensajes.this,"administradorDeMensajes", null,18);
SQLiteDatabase
escribe2=insert2.getWritableDatabase();
escribe2.execSQL("UPDATE
conversaciones SET estado='errorEnviar'WHERE id='" + maximo + "'" );
escribe2.close();
insert2.close();
Intent servicio2 = new
Intent(Principal_mensajes.this, servicioEntregaYerror.class);
startActivity(servicio2);
break;
case Activity.RESULT_CANCELED:
Toast saldo=Toast.makeText(contexto,"El
mensaje no ha sido enviado.Podría deberse a que su saldo se ha
terminado",Toast.LENGTH_LONG);
saldo.show();
BaseDeDatos insert3=new
BaseDeDatos(Principal_mensajes.this,"administradorDeMensajes", null,18);
SQLiteDatabase
escribe3=insert3.getWritableDatabase();
escribe3.execSQL("UPDATE
conversaciones SET estado='errorEnviar'WHERE id='" + maximo + "'" );
escribe3.close();
insert3.close();
}
}
};
entregados=new BroadcastReceiver() {
@Override
public void onReceive(Context contexto,Intent
intento){
s++;
String maximo2="";
BaseDeDatos sel2=new
BaseDeDatos(Principal_mensajes.this,"administradorDeMensajes", null,18);
SQLiteDatabase
max2=sel2.getReadableDatabase();
Cursor cursorMax2=max2.rawQuery("SELECT
max(id) as maximo FROM conversaciones WHERE number='" + number[s] +
"'",null);
while (cursorMax2.moveToNext()){
maximo2 =
cursorMax2.getString(cursorMax2.getColumnIndex(("maximo")));
}
cursorMax2.close();
max2.close();
sel2.close();
switch (getResultCode()){
case Activity.RESULT_OK:
BaseDeDatos db=new
BaseDeDatos(Principal_mensajes.this,"administradorDeMensajes", null,18);
SQLiteDatabase
insertar=db.getWritableDatabase();
insertar.execSQL("UPDATE conversaciones
SET estado='entregado' WHERE id=" + maximo2 );
insertar.close();
db.close();
break;
case Activity.RESULT_CANCELED:
BaseDeDatos db2=new
BaseDeDatos(Principal_mensajes.this,"administradorDeMensajes", null,18);
SQLiteDatabase
insertar2=db2.getWritableDatabase();
insertar2.execSQL("UPDATE
conversaciones SET estado='noEntregado' WHERE id=" + maximo2 );
insertar2.close();
db2.close();
break;
}
}
};
registerReceiver(enviados,new IntentFilter(SENT));
registerReceiver(entregados,new IntentFilter(DELIVERED));
AlertDialog.Builder builder = new
AlertDialog.Builder(this);
builder.setMessage("Estas seguro de enviar el mensaje?")
.setCancelable(false)
.setPositiveButton("Aceptar", new
DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id)
{
for(int c=0;c<number.length;c++){
BaseDeDatos bd1=new
BaseDeDatos(Principal_mensajes.this,"administradorDeMensajes", null,18);
SQLiteDatabase modo1=bd1.getWritableDatabase();
ContentValues registro1=new ContentValues();
registro1.put("address", address[c]);
registro1.put("number", number[c]);
registro1.put("body", textoet.getText().toString());
Calendar calendario = new GregorianCalendar();
int horas=calendario.get(calendario.HOUR_OF_DAY);
int minutos=calendario.get(calendario.MINUTE);
int segundos=calendario.get(calendario.SECOND);
String fecha=String.valueOf(horas + ":" + minutos + ":"
+ segundos);
registro1.put("horario",fecha );
Time time1= new Time(Time.getCurrentTimezone());
time1.setToNow();
String stringTime1=String.valueOf(time1.monthDay + "/"
+ time1.month + "/" + time1.year);
registro1.put("fecha",stringTime1);
modo1.insert("enviados", null, registro1);
modo1.close();
bd1.close();
BaseDeDatos bd2=new
BaseDeDatos(Principal_mensajes.this,"administradorDeMensajes", null,18);
SQLiteDatabase modo2=bd2.getWritableDatabase();
ContentValues registro2=new ContentValues();
registro2.put("address", address[c]);
registro2.put("number", number[c]);
registro2.put("body", textoet.getText().toString());
Calendar calendario2 = new GregorianCalendar();
int horas2=calendario.get(calendario2.HOUR_OF_DAY);
int minutos2=calendario.get(calendario2.MINUTE);
int segundos2=calendario.get(calendario2.SECOND);
String fecha2=String.valueOf(horas2 + ":" +
minutos2 + ":" + segundos2);
registro2.put("horario",fecha2 );
Time time2= new Time(Time.getCurrentTimezone());
time2.setToNow();
String stringTime2=String.valueOf(time2.monthDay + "/"
+ time2.month + "/" + time2.year);
registro2.put("fecha",stringTime2);
registro2.put("envia","true" );
registro2.put("ordenDeEnvio",String.valueOf(c) );
modo2.insert("conversaciones", null, registro2);
modo2.close();
bd2.close();
}
BaseDeDatos borra=new
BaseDeDatos(Principal_mensajes.this,"administradorDeMensajes", null,18);
SQLiteDatabase
cont=borra.getWritableDatabase();
cont.execSQL("DELETE FROM multipleContacts");
cont.close();
borra.close();
int length=textoet.length();
if (length>160){
ArrayList<String> parts =
manager.divideMessage(textoet.toString());
for(int a=0;a<number.length;a++){
manager.sendMultipartTextMessage(number[a], null,parts,sentIntents,deliveryIntents);
}
}
else
{
for(int b=0;b<number.length;b++){
manager.sendTextMessage(number[b],
null,textoet.getText().toString(),statusEnviado,statusEntregado);
}
}
Intent SMS = new Intent(Principal_mensajes.this,
lista.class);
startActivity(SMS);
finish();
}
})
.setNegativeButton("Cancelar", new
DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id)
{
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
return true;
}
else
if (arg0.getId()==cancelar.getId()){
BaseDeDatos borraTodo=new
BaseDeDatos(Principal_mensajes.this,"administradorDeMensajes", null,18);
SQLiteDatabase
contTodo=borraTodo.getWritableDatabase();
contTodo.execSQL("DELETE FROM
multipleContacts");
contTodo.close();
borraTodo.close();
Intent lista = new Intent(this,lista.class);
startActivity(lista);
finish();
}
}
return false;
}