¿Cómo hacer que el sistema operativo inicie aplicaciones en el momento del inicio?

Estoy ejecutando Android 4.3 Jelly Bean en un Samsung Galaxy SIII.

Estoy tratando de descubrir cómo configurar aplicaciones como Skype para que se inicien automáticamente una vez que el sistema haya pasado por el proceso de arranque, haya terminado de arrancar y se haya iniciado. Me gustaría poder hacer esto a través de una aplicación que no requiera que mi dispositivo esté rooteado, si es posible. Cuando observo la información relacionada con Skype en el Administrador de aplicaciones predeterminado, puedo ver que la aplicación de Skype utiliza el permiso "ejecutar al inicio", lo que significa que debería ser posible configurar esta aplicación para que se ejecute al inicio, pero No pude encontrar una casilla para hacerlo en esta pantalla, ni desde la configuración de la aplicación Skype. Una situación similar también puede ocurrir con otras aplicaciones.

Esta publicación trata sobre cómo evitar que las aplicaciones se inicien y menciona aplicaciones útiles de terceros, como Autorun Manager , que parece estar muy preocupado por bloquear el inicio y el reinicio de las aplicaciones una vez que se eliminan, o al menos esto es lo que deduzco de la descripción de la aplicación. en Play Store, y Autostarts , que activa, que administra qué aplicaciones se activan por eventos.

Asi que aqui están mis preguntas:

  • ¿Por qué no hay una aplicación de administrador de inicio nativa preinstalada en Android para controlar qué aplicaciones se inician de manera predeterminada y cuáles no?

  • Si skype requiere el permiso "ejecutar al inicio", y no hay lugar en el sistema operativo o en la aplicación para configurar dicha aplicación para que se inicie automáticamente, ¿qué logra este permiso?

Gracias.

Encuentro interesante su segunda pregunta, ya que también acabo de probar para ver si Skype ejecutó algo al inicio (¿quizás, un servicio en segundo plano?), Y no vi nada. Diría, "probablemente el desarrollador olvidó eliminar la solicitud de permiso", a menos que esté funcionando en otros dispositivos, por alguna razón.
Si, yo tampoco entiendo. Una vez que mi sistema se reinició, en el Administrador de tareas, encuentro: "Aplicaciones activas: 0", "Borrar valores predeterminados: Iniciar de forma predeterminada: YouTube [Borrar]". Si YouTube se inicia de forma predeterminada, como señala el Administrador de tareas, ¿por qué no aparece en las aplicaciones activas del Administrador de tareas? Tal vez una aplicación deba estar ejecutándose en primer plano para que aparezca como una "aplicación activa". Luego, en el Administrador de aplicaciones, Skype no aparece en la pestaña EN EJECUCIÓN, pero si hago clic en él en la pestaña DESCARGAS o en TODAS las pestañas, hay un botón "Forzar detención" habilitado, que se puede usar para detenerlo.
Por lo tanto, Skype se puede detener aunque no aparezca en el Administrador de tareas o en la pestaña EN EJECUCIÓN del Administrador de aplicaciones. No entiendo qué significa todo esto.
Acabo de comprobar de nuevo, y parece que todas las aplicaciones tienen habilitado el botón de "cierre forzado", incluso para aquellas que no se han abierto, por lo que tampoco sé el motivo.
En serio, no lo sé, tal vez esto signifique que se llamará a los componentes de su receptor de transmisión cuando se envíen los eventos correspondientes que están configurados para recibir. Pero esto es solo una suposición descabellada que podría estar totalmente equivocada. Tal vez alguien pueda aclarar este tema.
Creo que su segunda pregunta es un enfoque muy similar al de Windows. Cuando instala aplicaciones que usan este permiso, pueden recibir una transmisión y desde allí configurar un servicio, por ejemplo. Pero la opción de iniciar o no iniciar al inicio es muy de Windows. Por lo general, las aplicaciones de Android declaran sus necesidades de permiso al principio y luego deciden cómo actuar y reaccionar.
@joaquin, gracias por tu respuesta. Es muy claro y útil.

Respuestas (1)

Realmente sería bueno tener un administrador de inicio que se envíe con el sistema, lo que le permite al usuario decidir qué iniciar y qué no. Pero ese no es el caso, funciona un poco diferente:

Las aplicaciones con el permiso "ejecutar al inicio" pueden registrar un "oyente" para la BOOT_COMPLETEDtransmisión, que el sistema siempre emite en ese evento. De esta manera, se les notifica ese evento y pueden decidir realizar alguna acción. Eso podría estar iniciando algún servicio en segundo plano que sigue ejecutándose, pero también podrían hacer algo pequeño y luego salir de nuevo.

En mi humilde opinión, Skype tiene una opción para iniciar sesión automáticamente después del arranque, por lo que está disponible para las llamadas entrantes. AFAIR ese es incluso el comportamiento predeterminado de la aplicación. Si no hay un servicio en segundo plano ejecutándose para eso, podría registrarse para algunos mensajes en la nube, lo que nuevamente lo "activaría" para atender las llamadas entrantes. De esa manera, la aplicación no tenía necesidad de ejecutarse permanentemente en segundo plano. De hecho, la aplicación también declara el com.google.android.c2dm.permission.RECEIVEpermiso (C2DM significa "Cloud 2 Device Messaging", que ahora es GCM = Google Cloud Messaging), por lo que esta podría ser la explicación.


ACTUALIZAR:

Andrew T. confirmó esto en los comentarios:

Finalmente verifiqué el manifiesto de Android de Skype abriendo su archivo APK ( base.apk), y de hecho lo hay com.skype.android.push.DeviceBootReceivercon el filtro de intenciones android.intent.action.BOOT_COMPLETED. Sin embargo, no investigué lo que está haciendo. Además, olvidé que el receptor de transmisión no figura en el proceso de ejecución como mencionó John (puedo confirmar que se trata de un desarrollador). Entonces, tienes razón en tu suposición :)

Eso también es lo que creía, pero no estoy seguro después de confirmar que no hay un proceso de primer plano/segundo plano relacionado con Skype después del arranque. Es posible que el inicio solo se registre para la mensajería en la nube, pero, por lo que sé, es imposible que el mensaje se procese si no hay un proceso en ejecución que lo maneje. Aunque podría estar equivocado.
Gracias @Izzy por tu respuesta. En Application Manager puedo ver que Skype hace uso del permiso "recibir datos de Internet" que corresponde al permiso C2DM com.google.android.c2dm.permission.RECEIVE. Dado que Skype no figura en la lista, RUNNINGsupongo que cuando no hay un proceso o servicio ejecutándose en segundo plano, sino que el permiso "ejecutar al inicio" (android.permission.RECEIVE_BOOT_COMPLETED) permite a Skype registrar un receptor de transmisión para C2DM, y cuando el mensaje C2DM llega desde el servidor, el receptor de transmisión inicia la actividad de Skype.
Supongo que los receptores de transmisión no se enumeran RUNNINGen el Administrador de aplicaciones, ya que estos son iniciados por otro servicio del sistema (cuyo nombre no recuerdo en este momento). Corrígeme si estoy equivocado. Gracias.
@AndrewT. ahí es donde también tengo que pasar: al no ser un desarrollador, no tengo idea de cómo funciona esto exactamente. Pero mis expectativas van con lo que John describió en sus comentarios: Skype se inicia en el arranque, registra un receptor de transmisión y sale. Cada vez que llega un mensaje GCM y se dirige a Skype, la transmisión correspondiente "despierta/inicia" Skype nuevamente para procesarlo. De esta manera no hay necesidad de un proceso "inútil" para consumir recursos. Por cierto: la aplicación Stack Exchange funciona de la misma manera :)
Finalmente verifiqué el manifiesto de Android de Skype abriendo su archivo APK ( base.apk), y de hecho lo hay com.skype.android.push.DeviceBootReceivercon el filtro de intenciones android.intent.action.BOOT_COMPLETED. Sin embargo, no investigué lo que está haciendo. Además, olvidé que el receptor de transmisión no figura en el proceso de ejecución como mencionó John (puedo confirmar que se trata de un desarrollador). Entonces, tienes razón en tu suposición :)
¡Gracias por tu investigación, Andrés! Incluí esto con mi respuesta (dándote créditos, por supuesto), para que no "se pierda aquí" :)