2009-06-29 17 views
35

No estoy seguro de cómo iniciar automáticamente una aplicación de Android después de que el emulador de Android complete su arranque. ¿Alguien tiene algún fragmento de código que me ayude?Cómo iniciar automáticamente una aplicación de Android?

+0

@AdamC Usted está equivocado - ver la respuesta de Prashast. –

+0

@Rajapandian Propietario debe aceptar una respuesta si se trata de una solución de trabajo, o mencionar sus expectativas en los comentarios. Sería útil para otros. – naveejr

+0

http: // karanbalkar.com/2014/01/autostart-application-at-bootup-in-android/ –

Respuesta

12

Si por autostart quiere decir inicio automático en el inicio del teléfono, entonces debe registrar un BroadcastReceiver para el intento BOOT_COMPLETED. Los sistemas Android transmiten esa intención una vez que se completa el arranque.

Una vez que reciba esa intención, puede iniciar un servicio que puede hacer lo que quiera hacer.

Tenga en cuenta que tener un servicio funcionando todo el tiempo en el teléfono es generalmente una mala idea ya que consume los recursos del sistema, incluso cuando está inactivo. Debe iniciar su Servicio/aplicación solo cuando sea necesario y luego detenerlo cuando no sea necesario.

36

hay que añadir una entrada de permiso manifiesta:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

(por supuesto, usted debe agregar el resto de los permisos que utiliza su aplicación).

Luego, implemente la clase BroadcastReceiver, debería ser un ejecutable simple y rápido. El mejor enfoque es configurar una alarma en este receptor para activar su servicio (si no es necesario para mantenerlo funcionando correctamente, como escribió Prahast).

public class BootUpReceiver extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent intent) { 
    AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
    PendingIntent pi = PendingIntent.getService(context, 0, new Intent(context, MyService.class), PendingIntent.FLAG_UPDATE_CURRENT); 
    am.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + interval, interval, pi); 
}} 

A continuación, agregue una clase de receptor a su archivo de manifiesto:

<receiver android:enabled="true" android:name=".receivers.BootUpReceiver" 
     android:permission="android.permission.RECEIVE_BOOT_COMPLETED"> 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </receiver> 
+0

¿Cuál es el intervalo? – asmgx

+0

".receivers" en esta línea asmgx

16

Editar su AndroidManifest.xml para añadir RECEIVE_BOOT_COMPLETED permiso

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

Editar su aplicación partes AndroidManifest.xml por debajo de Permiso

<receiver android:enabled="true" android:name=".BootUpReceiver" 
android:permission="android.permission.RECEIVE_BOOT_COMPLETED"> 
<intent-filter> 
    <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
</intent-filter> 
</receiver> 

Ahora escriba a continuación en Actividad.

public class BootUpReceiver extends BroadcastReceiver{ 
@Override 
public void onReceive(Context context, Intent intent) { 
    Intent i = new Intent(context, MyActivity.class); 
    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    context.startActivity(i); 
} 
} 
+0

Funciona bien. ¡Gracias! –

0

Siempre me pongo aquí, para este tema. Pondré mi código aquí para que yo (u otro) lo pueda usar la próxima vez. (Phew odio buscar en mi código de repositorio).

agregar el permiso:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

Añadir receptor y servicio:

<receiver android:enabled="true" android:name=".BootUpReceiver" 
     android:permission="android.permission.RECEIVE_BOOT_COMPLETED"> 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </receiver> 
    <service android:name="Launcher" /> 

Crear clase de lanzador:

public class Launcher extends Service { 
    @Nullable 
    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 

     new AsyncTask<Service, Void, Service>() { 

      @Override 
      protected Service doInBackground(Service... params) { 
       Service service = params[0]; 
       PackageManager pm = service.getPackageManager(); 
       try { 
        Intent target = pm.getLaunchIntentForPackage("your.package.id"); 
        if (target != null) { 
         service.startActivity(target); 
         synchronized (this) { 
          wait(3000); 
         } 
        } else { 
         throw new ActivityNotFoundException(); 
        } 
       } catch (ActivityNotFoundException | InterruptedException ignored) { 
       } 
       return service; 
      } 

      @Override 
      protected void onPostExecute(Service service) { 
       service.stopSelf(); 
      } 

     }.execute(this); 

     return START_STICKY; 
    } 
} 

Crear clase BootUpReceiver hacer acción después de reiniciar el sistema androide.

Por ejemplo MainActivity lanzamiento:

public class BootUpReceiver extends BroadcastReceiver{ 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Intent target = new Intent(context, MainActivity.class); 
     target.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(target); 
    } 
} 
+0

error en asmgx

+0

@asmgx: He actualizado la respuesta. Olvidé ponerlo allí. – nafsaka

Cuestiones relacionadas