2011-03-04 10 views
6

Lo que quiero: quiero ser el primero en recibir la transmisión de Sms y quiero cancelar la transmisión si los mensajes de texto son de mi interés solamente, para que la transmisión no llegue a ninguna otra aplicación/receptor (Aplicación de mensajería predeterminada, etc.). Lo que sé es:Abortar/cancelar transmisiones

  • SmsDisptacher.java utiliza orderedBroadcasts que pueden ser canceladas puede/abortada.

Lo que no sé es:

  • Si orderedBrodcasts pueden ser canceladas por otras aplicaciones/receptores es decir que no sea usted.

lo que he tratado de ser el primero en recibir la emisión:

  • -filtro intención androide: Prioridad = "1000"

lo que he tratado de cancelación de emisión ya:

  • AbortBroadcast();
  • broadcastReceiver.setResultCode (RESULT_CANCELED)
  • clearAbortBroadcast()

Respuesta

0
+0

ES posible, utilizando el método que describe en su pregunta. ¿Te acordás de configurar los permisos correctos en tu manifiesto? Eche un vistazo a su salida de logcat para identificar dónde el sistema registra los sms entrantes y descubra por qué su receptor no lo intercepta. – Marmoy

+0

He enviado una respuesta completa para aclarar – Marmoy

1

que es posible hacer eso, hice un tutorial revisarlo haga here y here acaba de abortar la emisión en la parte superior de la jerarquía

11

Es ciertamente posible. Registre su receptor en su manifiesto de la siguiente manera:

<receiver android:name=".SmsReceiver"> 
    <intent-filter android:priority="1000"> 
     <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
    </intent-filter> 
</receiver> 

En el método OnReceive escritura de su receptor:

@Override 
public void onReceive(Context context, Intent intent) { 
    if (intent.getAction().equals(SMS_RECEIVED)) { 
     //do your stuff 
     abortBroadcast(); 
    } 
} 

Recuerde que debe establecer el permiso para recibir mensajes SMS en el manifiesto de esta manera:

<uses-permission android:name="android.permission.RECEIVE_SMS"/> 

Sin el permiso correcto establecido, se producirá un error silencioso con el siguiente mensaje de logcat:

07-13 12:54:13.208: WARN/ActivityManager(201): Permission Denial: receiving Intent { act=android.provider.Telephony.SMS_RECEIVED (has extras) } to com.mypackage requires android.permission.RECEIVE_SMS due to sender com.android.phone (uid 1001) 

Finalmente, es posible que otra aplicación haya registrado un receptor con una prioridad incluso mayor que la suya, y que, por lo tanto, reciba la transmisión antes de cancelarla. Entonces, si todo lo demás falla, intente experimentar con valores de mayor prioridad.

+0

y si no quiero tocar el archivo manifest ...es que el método de registerReceiver (smsSentReceiver, new IntentFilter (TAG_SENT)); "always working? @Videre – gumuruh

+0

@gumuruh Esperaría que registrar el receptor durante el tiempo de ejecución con Context.registerReceiver solo asegure la recepción de la difusión mientras la aplicación se esté ejecutando Esto significa que el sistema no despertará una aplicación 'durmiente' cuando se reciba un mensaje, a menos que esté registrada en el manifiesto. Alguien me corrige si estoy equivocado. – Marmoy

+0

bien. Ya lo tengo. @Videre – gumuruh

Cuestiones relacionadas