miércoles, 4 de abril de 2012

Primera Aplicación. Parte 5. Final

Antes que nada, en la entrada Primera Aplicación. Parte 4 se me ha olvidado indicar que para que la aplicación tenga acceso al sensor GPS del dispositivo, debe incluirse en el manifest de la aplicación la siguiente línea
...

    <uses-sdk android:minsdkversion="10">
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION">
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION">
    <uses-permission android:name="android.permission.INTERNET">
...

    </uses-sdk>

Para finalizar la serie de entradas para la primera aplicación falta indicar como se lanzará la aplicación. He decidido lanzarla en background como servicio. Para ello, he creado la clase com.m607.MainService que extiende la clase android.app.Service

package com.m607;

import com.m607.database.DBManager;
import com.m607.sound.SoundManager;

import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.IBinder;
import android.util.Log;

public class MainService extends Service {
 
 private DBManager db;
 private SoundManager sm;
 @Override
 public void onCreate() {
  Log.v("MainService", "Service created");
  db = new DBManager(this); 
         db.open();
     
         sm = new SoundManager();
         sm.initSounds(getBaseContext());
         sm.addSound(1, R.raw.sound);
         sm.addSound(2, R.raw.beep4);
         sm.addSound(3, R.raw.beep9);
     
     
  LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
  LocationListener ll = new GpsLocationListener(this,db, sm);
  lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 50, ll);
  
     
     if(db.getRadarCount()==0){
         db.deleteAllRadars();
         db.readCSV("es-allcam.txt");
     }
 }
 
 
 @Override
 public IBinder onBind(Intent arg0) {
  // TODO Auto-generated method stub 
  return null;
 }
 
 @Override
 public int onStartCommand(Intent intent, int flags, int startId) {
  return Service.START_STICKY;
 }
}

Esta clase instancia e inicializa el manejador de sonidos, el manejador de base de datos y el localizador GPS indicando que realice llamadas de refresco al dispositivo GPS cada segundo. En caso de que la tabla de radares de la base de datos este vacía, lee el fichero de radares y los inserta en base de datos.

Esta clase es instanciada desde el método onCreate de la actividad principal, com.m607.MainActivity, mediante una llamada al método startService de la clase Activity

<
package com.m607;

import android.app.Application;
import android.content.Intent;

public class MainActivity extends Application {
 @Override
 public final void onCreate() {
  super.onCreate();
  // se crea un servicio para localizar por GPS
  startService(new Intent(this, MainService.class));
  
 }
}
Por último, se añaden la actividad principal y el servicio en el manifest de la aplicación
...
   <application android:icon="@drawable/ic_launcher" android:label="@string/app_name">
       <service android:enabled="true" android:name=".MainService" />
       <activity android:label="@string/app_name" android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN">
                <category android:name="android.intent.category.LAUNCHER">
            </category></action></intent-filter>
        </activity>
    </application>

...

Resumen de artículos para la aplicación GPS:

Primera aplicación. Parte 1
Primera aplicación. Parte 2
Primera Aplicación. Parte 3
Primera Aplicación. Parte 4
Primera Aplicación. Parte 5


La aplicación completa se puede descargar aquí:

Primera Aplicacion. Avisador Radar para Vehículos

No hay comentarios:

Publicar un comentario