Categories
SugiBlog ホームページ制作・システム開発

位置情報を更新し、通知を出す

クラス直下で宣言

private PendingIntent pi;
LocationManager mLocationManager;
ReceiveLocation receiver;

onCreate内に以下を記述

mLocationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
receiver = new ReceiveLocation();

//指定したIntentに反応するようにReceiverにIntentFilterを登録
final IntentFilter filter = new IntentFilter();
filter.addAction("com.android.practice.ACTION_LOCATION_UPDATE");
registerReceiver(receiver, filter);


onResume内に以下を記述

//Intentを作成
final Intent nextIntent = new Intent();
nextIntent.setAction("com.android.practice.ACTION_LOCATION_UPDATE");

pi = PendingIntent.getBroadcast(this, 0, nextIntent, PendingIntent.FLAG_UPDATE_CURRENT);
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, pi);

onPause、もしくはonDestroyに以下が必要

mLocationManager.removeUpdates(pi);

onDestroyに以下が必要

unregisterReceiver(receiver);

通知を受け取るブロードキャストを作成

class ReceiveLocation extends BroadcastReceiver{
  @Override
  public void onReceive(Context context, Intent intent) {
    if(intent.hasExtra(LocationManager.KEY_LOCATION_CHANGED)){
      LocationManager lm = 
        (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
      Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
      String message = "Location\n"
        + "Longitude:" + location.getLongitude() + "\n"
        + "Latitude:" + location.getLatitude();
      Toast.makeText(context, message, Toast.LENGTH_LONG).show();
    }
  }
}

これは必要なのかわかりませんが、念のため
AndroidManifest.xmlのapplicationタグ内に記述します。

<receiver android:name="com.android.practice.LocationUpdateReceiver"/>

参考URL
http://d.hatena.ne.jp/sei10sa10/20110720/1311168936
http://techbooster.org/android/application/2525/

1,897 views

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*