Usando BroadcastReceiver en una aplicación detenida en Android 3.1+

¿Hay alguna forma de recibir transmisiones (como notificaciones de sms) en una aplicación detenida? En realidad, funciona simplemente en versiones inferiores a Android 3.1.

EDICIÓN 1: Gracias a @Squonk por el comentario. Así que mi pregunta es, ¿realmente es imposible? puede consultar la aplicación PlanB en el mercado que hace estas cosas.

EDIT 2: este es mi receptor de transmisión. La función onReceive nunca se llama (cuando se detiene la aplicación).

public class SmsReciever extends BroadcastReceiver {

    @Override
    public void onReceive(Context arg0, Intent arg1) {
        Log.e("kpav", "kpav");
        String url = "http://www.google.com";
        Intent i = new Intent(Intent.ACTION_VIEW);
        i.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        i.addFlags(32);
        i.setData(Uri.parse(url));

        arg0.startActivity(i);
    }
}

preguntado el 12 de junio de 12 a las 08:06

2 Respuestas

Para Android v3.1 en adelante, cualquier aplicación que el usuario haya iniciado manualmente al menos una vez, recibirá transmisiones que haya registrado en el manifiesto incluso después de un reinicio.

PERO... el usuario debe haber iniciado manualmente esa aplicación; de lo contrario, no es posible instalar una aplicación y hacer que reciba transmisiones automáticamente.

Además, si el usuario usa manualmente 'Forzar detención' desde la configuración de un dispositivo, ya no recibirá transmisiones hasta que el usuario vuelva a iniciar manualmente la aplicación.

Así que básicamente, en respuesta a tu pregunta...

¿Hay alguna forma de recibir transmisiones (como notificaciones de sms) en una aplicación detenida?

...la respuesta es no excepto bajo las circunstancias que describo arriba.

Respondido el 12 de junio de 12 a las 08:06

verifique la aplicación PlanB en el mercado, ¿cómo funciona si no es posible? - narek.gevorgyan

Creo que tuvimos esta conversación ayer. PLAN B aprovechó un agujero de seguridad que se cerró con v3.1 en adelante, ya que estaba abierto a posibles abusos por parte de malware. - Squonk

Puedes incluir Paquetes detenidos para recibir transmisiones simplemente agregando la siguiente bandera a la intención de transmisión.

intent.addFlags(32);

Mientras que 32 se refiere a Intent.FLAG_INCLUDE_STOPPED_PACKAGES que está disponible en Nivel de API 12.

Respondido el 12 de junio de 12 a las 08:06

me pueden ayudar mas especificamente como hacer esto. - narek.gevorgyan

simplemente agregue/establezca una bandera con valor 32 (por ejemplo intent.addFlags(32);) a su intención de transmisión y también será escuchado por todos aquellos paquetes que están marcados como Detenido - waqaslam

sí, el momento en que transmite su intención (dentro del código) y luego agrega esa bandera: waqaslam

por favor revise mi edición. el problema es que la función onReceive nunca se llama - narek.gevorgyan

ahaan, por lo que está tratando de obtener la transmisión de sms recibidos. Dado que esta transmisión es generada por el sistema, no puede agregar el valor de indicador 32 en su intención. Sin embargo, lo que puede hacer es mostrar una actividad (digamos Acuerdo de licencia) para activar su paquete antes de comenzar a recibir transmisiones - waqaslam

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.