jueves, 21 de febrero de 2013

Arrancar aplicación al iniciar Android


Desarrollo sobre la plataforma Android


Hola, en este nuevo post voy a escribir sobre algo bien práctico que tuve la necesidad de usar hace poco, y es que mi aplicación arranque al inicio una vez que allá booteado Android.
Como van a ver a continuación, no es una tarea demasiado complicada, simplemente deberemos agregar un permiso y utilizar un receiver, para poder lograr nuestro objetivo ;)
Ahora vamos a ver el código utilizado, para eso creamos un proyecto android de cero en nuestro Eclipse y vamos a modificar las siguientes cosas:

Este es nuestro manifest:


<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.aprendiendodeandroidymas.teststartbootandroid" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.aprendiendodeandroidymas.teststartbootandroid.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name=".BootReciever"> <intent-filter > <action android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter> </receiver> </application> </manifest>

Como pueden ver solo se le agregó el permiso RECEIVE_BOOT_COMPLETER y el receiber BootReceiver.

Esta es la clase principal que va a cargar nuestra activity, como podrán ver, no eh modificado nada de lo que te genera automaticamente el Eclipse.


package com.aprendiendodeandroidymas.teststartbootandroid;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

/**
* Clase que se va a encargar de cargar nuestra activity
* @author gabriel
*
*/
public class MainActivity extends Activity {

   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       // seteamos el layout a cargar
       setContentView(R.layout.activity_main);
   }

   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
       getMenuInflater().inflate(R.menu.main, menu);
       return true;
   }
}



Y por último, nuestro BroadcastReceiver:
package com.aprendiendodeandroidymas.teststartbootandroid;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

/**
* llamamos este broadcastreceiver al inicio en el manifest para que lance
* nuestra aplicación
* @author gabriel
*
*/
public class BootReciever extends BroadcastReceiver{

   @Override
   public void onReceive(Context context, Intent arg1) {
       // Esto deberia lanzar la clase que va a iniciar nuestra aplicación
       Intent miIntent = new Intent(context, MainActivity.class);
       miIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
       context.startActivity(miIntent);        
   }
}


Básicamente es una clase que hereda de BroadcastReceiver, y solo sobre escribimos el método onReceiver, para que lance nuestra aplicación

Referencia:
http://stackoverflow.com/questions/10428510/how-to-start-launch-application-at-boot-time-android

Código del proyecto:
https://github.com/Android-Hispano/android-hispano-demo/tree/master/StartBootAndroid

Espero que les haya resultado útil este post, donde fuimos directamente a la práctica ;) no es nada realmente complicado, solo sobreescribimos un método, agregamos un permiso, nada mas :D Nos vemos en la próxima.

Saludos a todos, Gabriel