Android Lollipop envía varios BroadcastReceivers para cambios de estado de teléfono
Hasta el androide kitkat teléfono Estado difusión receptor funciona bien. En el receptor de la difusión del estado del teléfono del lolipop del androide que envía la difusión múltiple. ¿Hay algo cambiado en Android Lolipop.
public class PhoneStateBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE); Log.d("PhoneState", state); } } } <receiver android:name="com.phonestate.PhoneStateBroadcastReceiver" > <intent-filter> <action android:name="android.intent.action.PHONE_STATE" /> </intent-filter> </receiver>
- Eliminar Apk después de la instalación de la aplicación
- Receptor de difusión de Android que no recibe la intención
- ¿Se pueden usar intentos pendientes con las transmisiones locales?
- SendMultipartTextMessage y monitor enviar y recibir
- BroadcastReceiver no funciona cuando la aplicación no se está ejecutando
- No se puede activar la aplicación desde el fondo en dispositivos Xiaomi hasta que "Autostart" se habilite manualmente
- No se puede cancelar el proceso de descubrimiento de Bluetooth
- Cómo obtener la categoría de la aplicación utilizando el nombre del paquete
- ¿Cómo diferenciar el dispositivo bluetooth conectado en android programmatically?
- ¿Cómo comprobar el número de teléfono propio introducido por el usuario en EditText?
- Propiedades duplicadas después de la actualización de la aplicación. ¿Las alarmas sobreviven?
- ¿Cómo implemento un BroadcastReceiver en una clase de servicio en Android?
- ¿Cómo muestra Starbucks una interfaz de usuario en dispositivos Android cuando está cerca de la tienda?
En Lollipop cada evento de cambio de estado de teléfono parece venir dos veces. En este artículo se describe el problema y se ofrece una solución simple para ello: http://mmarvick.github.io/blog/blog/lollipop-multiple-broadcastreceiver-call-state/
Recomendaría esta solución:
public void onReceive(Context context, Intent intent) { long subId = intent.getLongExtra("subscription", Long.MIN_VALUE); if(subId < Integer.MAX_VALUE) { // hurray, this is called only once on all operating system versions! } }
Funciona en ambos 4.xa 5.x y debe ser forward-compatible. Para más detalles, consulte mi blog:
http://www.skoumal.net/es/android-duplicated-phone-state-broadcast-on-lollipop/
- ¿Cómo agregar símbolos de monedas en pdf, generados por mi aplicación?
- Cómo tomar la instantánea de RTSP streaming con LibVLC para Android