Cómo iniciar un servicio cuando .apk está instalado por primera vez

En mi aplicación no estoy teniendo ninguna parte de IU, así que necesito comenzar un servicio tan pronto como la aplicación se instale en el dispositivo. Vi muchos enlaces de los cuales la respuesta fue que no es posible, pero supongo que es seguramente posible. Basta con echar un vistazo a la aplicación de PlanB en el Android Market que cumple con mi requisito. A continuación se muestra mi archivo de manifiesto cómo lo intenté, pero el servicio no se llamó en absoluto. Así pues, déjeme saber cuál es la mejor manera posible de comenzar un servicio cuando la aplicación consiga instalada.

ACTUALIZAR

También intenté usar android.intent.action.PACKAGE_ADDED funciona bien para detectar el paquete para las otras aplicaciones pero no para sí mismo.

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.auto.start" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <application android:icon="@drawable/ic_launcher" > <service android:name=".MyService"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </service> <receiver android:name=".BootUpReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> <category android:name="android.intent.category.DEFAULT"/> <action android:name="android.intent.action.PACKAGE_INSTALL" /> <action android:name="android.intent.action.PACKAGE_ADDED" /> <data android:scheme="package"/> </intent-filter> </receiver> </application> </manifest> 

9 Solutions collect form web for “Cómo iniciar un servicio cuando .apk está instalado por primera vez”

Afortunadamente, Plan B no funciona en Android 3.1 o posterior, como se prueba en un XOOM y un Nexus Galaxy.

Lo que hace Plan B es explotar un agujero de seguridad que podría ser utilizado por el malware drive-by, que es específicamente por qué Android evita que suceda más.


ACTUALIZAR

Para aclarar: Como inazaruk publicado y poner en comentarios sobre otras respuestas, todas las aplicaciones, una vez instalada, se colocan en un estado "detenido". Este es el mismo estado en el que la aplicación termina después de la fuerza del usuario: detiene la aplicación desde la aplicación Configuración. Mientras que en este estado "detenido", la aplicación no se ejecutará por ninguna razón, excepto por un lanzamiento manual de una actividad. En particular, no se invocará BroadcastReceviers , independientemente del evento para el que se hayan registrado, hasta que el usuario ejecute la aplicación manualmente.

Este bloque cubre el escenario del Plan B de instalación y ejecución remota, del que se estaban aprovechando anteriormente. Después de todo, con eso, cualquier persona con una cuenta de Google hackeada estaría en riesgo de tener su dispositivo infectado, manos libres, por así decirlo.

Por lo tanto, cuando el OP dice:

Necesito iniciar un servicio tan pronto como el Applicaton se instale en el dispositivo

El OP no tendrá éxito y tendrá que rediseñar la aplicación para evitar esta supuesta "necesidad".

Las aplicaciones instaladas en la partición / system no están sujetas a ser colocadas en el estado "parado" después de la instalación. Si tienes raíz, puedes hacerlo,

 $ adb root $ adb remount $ adb push your.apk /system/app 

Y puede recibir inmediatamente intentos de difusión. Esto ciertamente no proporciona una solución de propósito general, pero quería mencionar que para la integridad.

Estoy de acuerdo con la respuesta de CommonsWare a la pregunta: Cómo iniciar el servicio de Android en la instalación . En otras palabras, no puede iniciar automáticamente el servicio después de haberlo instalado.

Una cosa más acerca de las nuevas plataformas Android: si no tienes interfaz de usuario en absoluto, tendrás problemas para iniciar el servicio incluso cuando BOOT_COMPLETE en Android 3.1.

Esto se debe a que todas las aplicaciones instaladas están en estado detenido. En este estado, las aplicaciones no recibirán ninguna notificación de difusión.

Para activar su aplicación, otra aplicación (o usuario) necesita iniciar su servicio o actividad, o proveedor de contenido. El flujo de trabajo habitual es cuando el usuario hace clic en el icono de la aplicación.

He escrito una explicación detallada sobre esto en mi blog .

El Plan B lo lanza escuchando los eventos que ocurren en el sistema. Utiliza un receptor que literalmente listas a cientos de eventos con la esperanza de que algunos de ellos eventualmente se encienden. Así que esto es cómo usted puede hacerlo. De lo contrario, no hay medios integrados para iniciar la aplicación tan pronto como se instala.

No estoy seguro de cuáles son tus limitaciones / propósito, pero si puedes instalar otra aplicación que tenga una actividad, puedes enviarla con el flag FLAG_INCLUDE_STOPPED_PACKAGES .

Esto usará su aplicación para la resolución de intenciones, aunque esté en un estado detenido. Si la acción de la intención coincide con uno de sus filtros, también sacará el paquete del estado detenido.

No lo creo Usted puede iniciar el servicio inmediatamente después de instalar su aplicación en el dispositivo,

La aplicación debe primero ser invocada por el usuario a través de algún tipo de Activity . Las únicas cosas que usted tiene que registrar un Broadcast Receiver con las intenciones adecuadas en el manifiesto que invocar servicio cuando algo está sucediendo en el dispositivo, pero esta remaing a la versión de Android 3.1.

EDITAR:

Después de Android 3.1 y versiones posteriores, no se puede utilizar ninguna Broadcast para iniciar la aplicación, ya que toda la aplicación permanece inactiva después de finalizar el arranque del dispositivo y para iniciar la aplicación que el usuario tiene que invocar (pulsando el icono de la aplicación).

Como declarado por CommonsWare en la respuesta a esta pregunta (que supongo que tiene todo listo visto, pero optó por ignorar) iniciar un servicio de instalación no es posible – simplemente no es una cosa que se implementa en la plataforma.

Sin embargo, es posible iniciarlo de forma automática en el siguiente arranque.

Como se indica en los Detalles Técnicos de PlanB:

Plan B intentará lanzar tan pronto como descargue, pero en algunos casos necesitará enviar un SMS para que se inicie.

Mi conjetura es que en un teléfono con raíz puede ser capaz de iniciar el Service en instalación – pero no hay garantía de que el teléfono está enraizado, por lo que PlanB requerirá recibir un texto en algunos casos, ya que puede ser registrado por el IntentFilter de La aplicación y luego se utiliza para iniciar el Service .

Tal vez la mejor manera de lograr esto (y ahora estoy hablando a la intención específica del OP, un programa que se instala para recuperar un teléfono robado, no la cuestión general) es la ingeniería social, no la ingeniería de software.

Por lo tanto, un icono con texto como "Lista de contraseñas" o "Mi cuenta bancaria", que de repente apareció en la pantalla de inicio, sin duda, se haga clic en. Mira el éxito de todo tipo de phishing, y aquí estarías dirigido a un ladrón, que ya está motivado para continuar la actividad nefasta. Deja que el ladrón lo comience por ti. 🙂

Hay una aplicación en google play Android Lost que invocan el servicio de registro de google push mensajes a través de un sms entrante sin lanzar la aplicación ni siquiera una vez para la versión 3.0 o superior.

  • Si un texto en un TextView es más largo que el espacio disponible, ¿cómo obtener las líneas restantes?
  • ¿Qué significa android: layout_weight?
  • Mantener el estado abierto / cerrado del teclado para EditText cuando la aplicación llega al primer plano
  • ¿Dónde defino mi OnClickListener para cerrar una vista de diálogo personalizada en Android?
  • Mostrar datos en android utilizando gridview desde la base de datos
  • ¿Cómo mostrar el diálogo en el método onCreate?
  • Spinner - enfoque al primer artículo
  • Estilo personalizado para Android TabWidget
  • ¿Cómo acceder a recurso con nombre dinámico en mi caso?
  • SetContentView (R.layout.Main); Main no se puede resolver o no es un campo
  • Ciclo de vida de Android Widget
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.