android push-notification autostart

Android: ¿cómo habilitar la opción de inicio automático mediante programación en dispositivos Xiaomi?



push-notification autostart (4)

Para dispositivos xiaomi, oppo, vivo, etc. para habilitar la opción de inicio automático mediante programación

String manufacturer = android.os.Build.MANUFACTURER; try { Intent intent = new Intent(); if ("xiaomi".equalsIgnoreCase(manufacturer)) { intent.setComponent(new ComponentName("com.miui.securitycenter", "com.miui.permcenter.autostart.AutoStartManagementActivity")); } else if ("oppo".equalsIgnoreCase(manufacturer)) { intent.setComponent(new ComponentName("com.coloros.safecenter", "com.coloros.safecenter.permission.startup.StartupAppListActivity")); } else if ("vivo".equalsIgnoreCase(manufacturer)) { intent.setComponent(new ComponentName("com.vivo.permissionmanager", "com.vivo.permissionmanager.activity.BgStartUpManagerActivity")); } else if ("Letv".equalsIgnoreCase(manufacturer)) { intent.setComponent(new ComponentName("com.letv.android.letvsafe", "com.letv.android.letvsafe.AutobootManageActivity")); } else if ("Honor".equalsIgnoreCase(manufacturer)) { intent.setComponent(new ComponentName("com.huawei.systemmanager", "com.huawei.systemmanager.optimize.process.ProtectActivity")); } List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); if (list.size() > 0) { startActivity(intent); } } catch (Exception e) { e.printStackTrace(); }

Estoy desarrollando una aplicación de Android en la que quiero mostrar la notificación Push.

Se ha mostrado bien en la mayoría de los dispositivos, excepto en los teléfonos Xiaomi (estoy usando Redmi Note 4). El problema que encontré es que es debido a la opción de inicio automático proporcionada por Xiomi que estará deshabilitada de manera predeterminada y el usuario debe habilitarla manualmente.

Pero me pregunto que algunas de las aplicaciones de Android que pude ver habilitando esta opción sin ninguna interacción del usuario, por ejemplo, WhatsApp. Si intento reinstalar WhatsApp y veo la opción de inicio automático, ¡está habilitada!

No puedo convencer a nuestro cliente diciéndole que es la característica de los dispositivos similares a Xiomi, ya que está señalando algunas aplicaciones que funcionan bien, como el ejemplo que he mencionado anteriormente.

Esta pregunta ha sido formulada por otras personas.

Agregar mi aplicación a la lista de aplicaciones de inicio automático en Android mediante programación

Cómo verificar AutoStart está habilitado para nuestra aplicación en el dispositivo móvil del fabricante de Xiaomi mediante programación

Pero no pude ver ninguna respuesta para ellos y publicar aquí con la esperanza de que alguien tenga una respuesta para esto.


Hasta donde yo sé, WhatsApp está en la lista blanca del dispositivo de arranque automático del dispositivo Xiaomi. No hay nada que puedas hacer al respecto. Por supuesto, su aplicación será incluida en la lista blanca por Xiaomi si finalmente obtuvo tanta popularidad como WhatsApp. Hasta que eso suceda, solo puede pedirle al usuario que lo active manualmente mostrando la función de inicio automático con algo como esto:

try { Intent intent = new Intent(); if ("xiaomi".equalsIgnoreCase(android.os.Build.MANUFACTURER)) { intent.setComponent(new ComponentName("com.miui.securitycenter", "com.miui.permcenter.autostart.AutoStartManagementActivity")); } // context is your Context List<ResolveInfo> list = context.getPackageManager() .queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); if (list.size() > 0) { context.startActivity(intent); } } catch (Exception e) { Log.d("PERMISSION", e.toString()); }

Tenga en cuenta que no he probado el código para el dispositivo Xiaomi actual.


La función de inicio automático se habilitará automáticamente cuando descargue la aplicación desde la tienda de juegos si xiaomi OS lo desea, ya que las aplicaciones como amazon, google IO, etc. tampoco pueden iniciar automáticamente, en este caso debe ir a Permisos de seguridad -> inicio automático -> luego habilite el inicio automático desde allí. No puede hacer que la aplicación inicie automáticamente por código, todo lo que puede hacer es mostrar un cuadro de diálogo para habilitar el inicio automático y llevar al usuario a la actividad de inicio automático, pero esta no es una buena opción ya que no puede verificar si el inicio automático es habilitado o no. Esto lo hace Mi en MIUI8 para ahorrar batería. Este problema desperdició mis 2 días XD

Puedes consultar este artículo .


Pocas aplicaciones populares se ejecutan en segundo plano sin ser eliminadas durante el ciclo de limpieza de la memoria (muchos de los OEM más populares personalizan la ROM de la pila para la optimización de la batería / memoria), porque estos fabricantes están en la "Lista blanca". Para su aplicación, puede incluirla en la lista blanca manualmente (a través de las "configuraciones" correspondientes para los dispositivos) o pragmáticamente redirigiendo a los usuarios a la página de configuración correspondiente para incluir la aplicación en la lista blanca. Pragmáticamente puedes hacer lo siguiente:

  1. Agregue los siguientes permisos en el archivo de manifiesto de la aplicación: `

    <uses-permission android:name="oppo.permission.OPPO_COMPONENT_SAFE"/> <uses-permission android:name="com.huawei.permission.external_app_settings.USE_COMPONENT"/>`

  2. Redireccione su a la configuración de Inicio automático:

    if (Build.BRAND.equalsIgnoreCase("xiaomi")) { Intent intent = new Intent(); intent.setComponent(new ComponentName("com.miui.securitycenter", "com.miui.permcenter.autostart.AutoStartManagementActivity")); startActivity(intent); } else if (Build.MANUFACTURER.equalsIgnoreCase("oppo")) { try { Intent intent = new Intent(); intent.setClassName("com.coloros.safecenter", "com.coloros.safecenter.permission.startup.StartupAppListActivity"); startActivity(intent); } catch (Exception e) { try { Intent intent = new Intent(); intent.setClassName("com.oppo.safe", "com.oppo.safe.permission.startup.StartupAppListActivity"); startActivity(intent); } catch (Exception ex) { try { Intent intent = new Intent(); intent.setClassName("com.coloros.safecenter", "com.coloros.safecenter.startupapp.StartupAppListActivity"); startActivity(intent); } catch (Exception exx) { } } } }

Referencia de inicio automático para otros OEM

He probado este método y funcionó, pero la confiabilidad sigue siendo una pregunta, ya que el sistema toma tiempo (aproximadamente 2 minutos en dispositivos PoccoF9 y Xiomi) para reiniciar el servicio inactivo.

Pero como usuario, podemos evitar que los servicios en segundo plano de la aplicación se eliminen de la siguiente manera:

  1. Presione la tecla física Aplicaciones recientes (botón del lado izquierdo).
  2. Arrastre la aplicación hacia abajo una vez (selecciónela, manténgala presionada y deslícela hacia abajo) toque el icono de bloqueo (si el bloqueo está en estado abierto) para bloquear la aplicación.
  3. La aplicación se pondrá en estado de bloqueo (incluso si borra los procesos de la aplicación en segundo plano borrando, la aplicación seguirá ejecutándose).
  4. Del mismo modo, si desea eliminarlo de la condición de bloqueo, simplemente arrastre hacia abajo una vez y el símbolo de bloqueo desaparecerá (al borrar el proceso en segundo plano también se borrará la aplicación).

Pero, de esta manera, el estado de bloqueo de la aplicación se restablecerá al reiniciar en la mayoría de los dispositivos.

EDITAR: Después de observar el comportamiento (en RedmiS3 de Xiomi, Android V6.0) del servicio en primer plano, aquí está el análisis:

  1. Incluso después de habilitar "AutoStart" mediante programación (a través de la intervención del usuario, como se explicó anteriormente) el servicio no se reinicia siempre (el servicio se reinicia solo en algunas ocasiones, pero la mayoría de las veces no lo hizo).
    Además, si busco "AutoStart" en la configuración del dispositivo, no puedo ver mi aplicación allí en la lista de AutoStart. Parece que el método anterior solo proporciona permiso de inicio automático pero no lo habilita, ¡NO ESTÁ SEGURO! Y, si agrego mi aplicación a la lista de "Inicio automático" a través de la configuración del dispositivo, mi servicio se reinicia (aunque lleva algo de tiempo).

  2. Reiniciar el servicio cancelado en la devolución de llamada onTaskRemoved () podría ser otra opción, pero esta devolución de llamada se llama de manera sorprendente cuando se cancela el servicio. Esta devolución de llamada se ejecuta solo cuando la aplicación se ha cerrado correctamente presionando la tecla Atrás. Si minimizamos la aplicación (estado de pausa), esta devolución de llamada nunca se llama al finalizar el servicio. (Buscando la razón)

Recientemente encontré otra forma, el servicio cancelado podría reiniciarse a través del evento de notificación GCM. Dudo que el GCM funcione cuando la aplicación se mata en los dispositivos o no (necesito verificar esto y verificar el comportamiento). Pero uno es seguro "¡ Estos OEMs han hecho que la vida del programador sea un infierno! ).