utilizo este código, como BroadcastReceiver:
public void onReceive(Context context, Intent intent)
{
//this stops notifications to others
this.abortBroadcast();
//---get the SMS message passed in---
Bundle bundle = intent.getExtras();
SmsMessage[] msgs = null;
String str = "";
if (bundle != null)
{
//---retrieve the SMS message received---
Object[] pdus = (Object[]) bundle.get("pdus");
msgs = new SmsMessage[pdus.length];
for (int i=0; i<msgs.length; i++){
msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
str += "SMS from " + msgs[i].getOriginatingAddress();
from = msgs[i].getOriginatingAddress();
str += " :";
str += msgs[i].getMessageBody().toString();
msg = msgs[i].getMessageBody().toString();
str += "\n";
}
if(checksomething){
//make your actions
//and no alert notification and sms not in inbox
}
else{
//continue the normal process of sms and will get alert and reaches inbox
this.clearAbortBroadcast();
}
}
no olvide añadirlo en el manifiesto y añadir una prioridad higgest (100) para su difusión o sms irá primero a la bandeja de entrada y obtener la notificación de alerta.
<receiver android:name=".SmsReceiver">
<intent-filter android:priority="100">
<action android:name="android.provider.Telephony.SMS_RECEIVED"></action>
</intent-filter>
</receiver>
Espero que te ayude.
así necesito Android para no mostrar el 'nuevo mensaje' notificación predeterminado si mi solicitud ya ha manejado el SMS entrante. Por lo que es un requisito importante para la mejor experiencia de usuario :( –
bien hay muchas discusiones sobre StackOverflow que le dirá u no es posible sin necesidad de utilizar sus propias clases prolongados de los que están ocultos ....... pero sí se wan esperar a que la respuesta del otro también ........ – viv
Ahora abortBroadcast(); método se puede utilizar para restringir el mensaje entrante para ir a la bandeja de entrada. – AB1209