clear Las aplicaciones recientes borran la memoria de las aplicaciones y mi receptor dejó de funcionar

El Receptor de MyApp funciona bien si está en segundo plano, que es:

public class MySmsReceiver extends WakefulBroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { System.out.println("triggered sms"); if(intent.getAction().equals(Telephony.Sms.Intents.SMS_RECEIVED_ACTION)) { Toast.makeText(context, "message Received", Toast.LENGHT_SHORT).show(); } } 

y mi archivo manifiesto para el receptor es

       

El documento dice que si declaro un receptor en el archivo de manifiesto, siempre debería funcionar. pero en mi caso no es …

Pero cada vez que borro mis aplicaciones recientes deslizándolas simplemente deja de funcionar. y luego fui a Taskmanager y vi que MyApps forcestop estaba deshabilitado como abajo captura de pantalla de mi aplicación en taskmanager

y me di cuenta de que algunas aplicaciones como watsapp y fb siempre se conservan en la memoria. Estoy diciendo esto porque después de deslizar las aplicaciones recientes, el administrador de tareas tiene el siguiente estado, como se muestra a continuación

fb estado en el administrador de tareas

y estado de watsapp en taskmanager

¿Cómo puedo hacer esto en mi aplicación? ¿Qué hará que mi aplicación se comporte como otras aplicaciones de terceros como watspp y facebook … cómo puedo hacer que mi aplicación esté en la memoria? Siempre pregunto esto. Entonces solo mi receptor siempre funcionará .. Si estoy equivocado, entonces dame una solución para hacer esto …

He estado buscando esto mucho y todavía no puedo encontrar la solución … ¿Estoy preguntando mal? o realmente hay una manera de hacerlo? Por favor, alguien me ayude … ¡Esto me hace una semana! Espero haber explicado mi problema aquí si no me preguntan, les daré una respuesta inmediata.

En algunos dispositivos Huawei (y algunos dispositivos LG y Xiaomi), debe agregar su aplicación a la lista de aplicaciones que pueden ejecutarse en segundo plano. Si no lo hace, una vez que se detiene su aplicación (al deslizar desde la lista de tareas recientes, o que Android mate la aplicación por razones de recursos), NO se reiniciará automáticamente.

En dispositivos Huawei, la configuración se denomina “aplicaciones protegidas”. No puede agregar su aplicación mediante progtwigción a la lista de “aplicaciones protegidas”. Debes decirle al usuario que tiene que hacerlo después de que hayas instalado tu aplicación. Las aplicaciones conocidas (como Whatsapp, Facebook, Google Mail) son agregadas automáticamente por el fabricante.

Este comportamiento puede ser diferente en diferentes dispositivos y puede ser diferente en diferentes versiones de Android y puede ser diferente si el dispositivo está “marcado” para un operador de telefonía móvil específico, ya que los operadores móviles también pueden jugar con la configuración ellos mismos.

Consulte la configuración de “Aplicaciones protegidas” en teléfonos Huawei y cómo manejarlo para obtener más información.

EDITAR: Agregué esto:

Además, Android rompió el comportamiento de “deslizamiento de los recientes” en Android 4.4 (Kitkat), por lo que causa problemas para las aplicaciones que se han eliminado. Los servicios fijos no se vuelven a retomar y los Intentos de difusión no se entregan. Aquí hay información acerca de las soluciones para lidiar con eso: en Android 4.4, deslizar la aplicación fuera de las tareas recientes mata de forma definitiva a la aplicación con su servicio. ¿Alguna idea de por qué?

Además, ¿ha instalado su aplicación en la tienda Google Play? Es posible que el comportamiento sea diferente para las aplicaciones que se han instalado desde Play Store en comparación con las aplicaciones que se instalan localmente (desde descargas o mediante adb o lo que sea).

Parece que este escenario ocurre en algunos dispositivos (por ejemplo, Xiaomi, dispositivos de Honor, dispositivos Samsung con la función SmartManager, etc.) donde la aplicación se detiene cuando el usuario retira la aplicación de tareas recientes.

Esto se debe a que esos fabricantes han agregado una función de administrador de tareas de forma predeterminada, que fuerza a las aplicaciones a la gestión de memoria / batería. Pero pocas aplicaciones como Whatsapp, Facebook funcionan. Esto puede deberse a que incluirían en la lista blanca las aplicaciones más famosas.

Yendo por la documentación del desarrollador de Android / recomendaciones de UX, una posible solución para este escenario,

Dispositivos basados ​​en Case Xiaomi MIUI:

Cree un UX para comunicarse con el usuario y habilitar el permiso “AutoStart” para su aplicación. Básicamente, el usuario debe abrir la aplicación “Seguridad” -> hacer clic en “Permisos” -> hacer clic en “Inicio automático” -> buscar su aplicación y habilitarla. Sé que es ridículo y doloroso, pero no hay otra opción directa.

Haga lo anterior después de verificar si el fabricante es Xiaomi

 String manufacturer = "xiaomi"; if(manufacturer.equalsIgnoreCase(android.os.Build.MANUFACTURER)) { //this will open auto start screen where user can enable permission for your app Intent intent = new Intent(); intent.setComponent(new ComponentName("com.miui.securitycenter", "com.miui.permcenter.autostart.AutoStartManagementActivity")); startActivity(intent); } 

Nota: Este procedimiento puede ser diferente para dispositivos de Honor, dispositivos Samsung, ya que es muy específico para el fabricante.

También como una forma normal de resolver esto para otros dispositivos, es crear un servicio onTaskRemoved con anulación en el método onTaskRemoved . Use el siguiente código:

 public class BackgroundService extends Service { @Nullable @Override public IBinder onBind(Intent intent) { return null; } @Override public int onStartCommand(Intent intent, int flags, int startId) { return START_STICKY; } @Override public void onTaskRemoved(Intent rootIntent) { //create a intent that you want to start again.. Intent intent = new Intent(getApplicationContext(), BackgroundService.class); PendingIntent pendingIntent = PendingIntent.getService(this, 1, intent, PendingIntent.FLAG_ONE_SHOT); AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); alarmManager.set(AlarmManager.RTC_WAKEUP, SystemClock.elapsedRealtime() + 5000, pendingIntent); super.onTaskRemoved(rootIntent); } } 

Aquí el servicio comenzará de nuevo después de 5 segundos. Puede reemplazarlo con la intención de volver a comenzar luego de haber sido borrado de las aplicaciones recientes.

Si el botón “Forzar parada” está desactivado, significa que al deslizar la aplicación hacia fuera en Descripción general, se ha forzado la detención forzosa de la aplicación en este dispositivo. No recibirás ninguna transmisión hasta que el usuario interactúe de nuevo con tu aplicación.