android - start - Transmisor y actividad pausada
registerreceiver android (3)
Tengo un receptor de radiodifusión registrado programáticamente en una actividad. Responde a la intención PACKAGE_REMOVED
, que se PACKAGE_REMOVED
cuando se elimina un paquete.
El problema es que no recibe este mensaje. Creo que esto se debe a que la intención se activa cuando abandono la actividad y me muevo a otra actividad para desinstalar una aplicación, por lo que la actividad original se detiene. ¿Podría ser que una actividad en pausa (donde el receptor no está desregistrado en onPause
) también hace una pausa en el receptor?
Agregue un docs a su proyecto y obtendrá este evento sin siquiera iniciar su aplicación.
public class TestReciver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("TestReciver",intent.getAction()+"/n"
+intent.getDataString()+"/n"
+"UID: "+intent.getIntExtra(Intent.EXTRA_UID,0)+"/n"
+"DATA_REMOVED: "+intent.getBooleanExtra(Intent.EXTRA_DATA_REMOVED, false)+"/n"
+"REPLACING: "+intent.getBooleanExtra(Intent.EXTRA_REPLACING, false)
);
}
}
y en su manifiesto, agréguelo así (dentro de su etiqueta <aplicación>):
<receiver android:name="TestReciver" >
<intent-filter >
<action android:name="android.intent.action.PACKAGE_REMOVED" />
<data android:scheme="package" />
</intent-filter>
</receiver>
Cuando usa un receptor como este, no llama a ningún registro o anula el registro, por lo que siempre estará listo para obtener datos.
Una nota es que esto no funcionará si permite a los usuarios mover su aplicación a la tarjeta SD. Si se envía un evento cuando se desmonta la tarjeta SD, no se podrá acceder al receptor y se perderá el evento.
Cuando registra un receptor de difusión programáticamente en una actividad, NO se emitirán cuando la actividad esté en pausa. Los docs BroadcastReceiver no son tan claros como podrían ser en este punto. Recomiendan cancelar el registro en onPause únicamente para reducir la sobrecarga del sistema.
Si desea recibir eventos incluso cuando su actividad no está en primer plano, registre el receptor en su manifiesto utilizando el elemento receiver .
Tal vez pueda registrar el receptor en servicio que se ejecutará en segundo plano.