[android] 位置情報をバックグラウンドで取得、DBに追加
目次
位置情報をバックグラウンドで取得、DBに追加
位置情報をバックグラウンドで取得するにはserviceを立ち上げてバックグラウンドで都度位置情報を取得する
Manifest.xml
LocationReceiver.java
public class LocationReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent){
String locationKey = LocationManager.KEY_LOCATION_CHANGED;
String providerEnableKey = LocationManager.KEY_PROVIDER_ENABLED;
if(intent.hasExtra(providerEnableKey)){
if(!intent.getBooleanExtra(providerEnableKey, true)){
Toast.makeText(context, "provider disabled",
Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(context, "provider enabled",
Toast.LENGTH_SHORT).show();
}
}
if(intent.hasExtra(locationKey)){
Location loc = (Location)intent.getExtras().get(locationKey);
Toast.makeText(context, "Location changed : Lat: " +
loc.getLatitude() + "Lng: " + loc.getLongitude(),
Toast.LENGTH_SHORT).show();
DBAdapter db = new DBAdapter(context);
db.open();
db.insertLocation(String.valueOf(loc.getLatitude()),
String.valueOf(loc.getLongitude()));
db.close();
}
}
}
*SQLiteの実装方法は
[android] SQLiteを実装(DB Browser for SQLiteでDBを作成)
を参照
LocationService.java
10秒たった時に10m以上動いていた場合に位置情報を取得する
public class LocationService extends Service
{
private static final String TAG = "LocationService";
private LocationManager mLocationManager = null;
private static final int LOCATION_INTERVAL = 10000; //10秒
private static final float LOCATION_DISTANCE = 10f; //10m
PendingIntent pendingIntent;
@Override
public IBinder onBind(Intent arg0){
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId){
Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();
//---use the LocationManager class to obtain locations data---
mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Intent i = new Intent(this, LocationReceiver.class);
pendingIntent = PendingIntent.getBroadcast(
this, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);
//---request for location updates using GPS---
try {
mLocationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER, LOCATION_INTERVAL, LOCATION_DISTANCE,
pendingIntent);
} catch (SecurityException ex) {
Log.i(TAG, "fail to request location update, ignore", ex);
} catch (IllegalArgumentException ex) {
Log.d(TAG, "gps provider does not exist " + ex.getMessage());
}
return START_STICKY;
}
@Override
public void onDestroy(){
//---remove the pending intent---
mLocationManager.removeUpdates(pendingIntent);
super.onDestroy();
Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show();
}
}
MainActivity.java
Intent intent = new Intent(this, LocationService.class); startService(intent);