ウェブアプリケーション,インジェクション,コマンドインジェクション

Androidアプリ開発 位置情報を扱うサービスいろいろ

一番の位置プロバイダを選んで使う

Choosing the Best Location Provider to Use

位置を判断に役立つ可能性のある一番良いproviderを
選べる様にしたいとします。
GPS、Wi-Fi、セルラーネットワークを使って地理的位置情報を
取得します
では、
GPS、Wi-Fi、セルラー三角測量を使って現在の位置情報を
取得するためにGPS_PROVIDERとNETWORK_PROVIDERを
どのように使うかを示しました。
しかし、時には特定の必要なものに依って一番良いプロバイダを
OSに判断させたいことがあるかもしれません。
この場合、LoccationManagerクラスのgetBestProvider()メソッドを
指定された基準を元にアプリケーションが決定するのを助けるために
使えます。まずLocationManager型のオブジェクトを作ります。

package net.learn2develop.locationproviders;

import android.app.Activity;
import android.location.LocationManager;
import android.os.Bundle;

public void MainActivity extends Activity{
  LocationManager lm;
  @Override
  public void onCreate(Bundle savedInstanceState){
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);
  }
}

getSystemService()メソッドを呼び出すことでLocationManagerクラスの
インスタンスを生成します。

/** Called when the activity is first created */
@Override
public void onCreate(Bundle savedInstanceState){
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  lm = (LocationManager) getSystemService(LOCATION_SERVICE);
}

位置プロバイダのリストを得るためには、
LocationManagerクラスのgetAllProviders()メソッドを使い、
このメソッドは位置プロバイダのリストを返します。

package net.learn2develop.locationproviders;

immport java.util.List;

import android.app.Activity;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends Activity{
  LocationManager lm;

  @Override
  public void onCreate(Bundle savedInstanceState){
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);

   lm = (LocationManager) getSystemService(LOCATION_SERVICE);

   //---print out all the location providers---
   List<String> locationProviders = lm.getAllProviders();
   for (String provider : locationProviders){
    Log.d("LocationProviders", provider);
   }
  }
}

一番良い位置プロバイダを判断するための基準のセットを指定するには、
Criteriaクラスのインスタンスを作り、このインスタンスに様々な
メソッドを以下のようにセットします。

package net.learn2develop.locationproviders;

import java.util.List;
import android.app.Activity;
import android.location.Criteria;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends Activity{
  LocationManager lm;

  @Override
  public void onCreate(Bundle savedInstanceState){
   super.onCreate(savedInstanceState);
   setContentView(R.layout.Activity_main);

   lm = (LocationManager) getSystemService(LOCATION_SERVICE);

   //---print out all the location providers---
   List<String> locationProviders = lm.getAllProviders();
   for (String provider : locationProviders){
    Log.d("LocationProviders", provider);
   }

   //---set the criteria for best location provider---
   Criteria c = new Criteria();
   c.setAccuracy(Criteria.ACCURACY_FINE);
   //---or---
   c.setAltitudeRequired(false);
   c.setBearingRequired(false);
   c.setCostAllowed(true);
   c.setPowerRequirement(Criteria.POWER_HIGH);
  }
}

基準のリストを元にしてデバイスで入手できる一番良い
位置プロバイダを得るためには、getBestProvider()メソッドを
呼び出します。

@Override
public void onCreate(Bundle savedInstanceState){
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  lm = (LocationManager) getSystemService(LOCATION_SERVICE);

  //---print out all the location providers---
  List<String> locationProviders = lm.getAllProviders();
  for (String provider : locationProviders){
   Log.d("LocatinProviders", provider);
  }

  //---set the criteria for best location provider---
  Criteria c = new Criteria();
  c.setAccuracy(Criteria.ACCURACY_FINE);
  //---or---
  //c.setAccuracy(Criteria.ACCURACY_COARSE);
  c.setAltitudeRequired(false);
  c.setBearingRequired(false);
  c.setCostAllowed(true);
  c.setPowerRequirement(Criteria.POWER_HIGH);

  //---get the best location provider---
  String bestProvider = lm.getBestProvider(c, true);
  Log.d("LocationProviders", "Best provider is " + bestProvider);
}

もしLocationManagerオブジェクトを使って
更新リクエストすること無しに、知っている最新の位置情報を
素早く得たいとするなら、getLastKnownLocation()メソッドを
呼び出し、このメソッドに位置プロバイダの名前をgpsかnetworkの
どちらかで渡します。
もし位置が把握できるようなら、Locationオブジェクトとして返されます。

import android.location.Location;
...

  @Override
  public void onCreate(Bundle savedInstanceState){
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);

   lm = (LocationManager) getSystemService(LOCATION_SERVICE);

   //---print out all the location providers---
   List<String> locationProviders = lm.getAllProviders();
   for (String provider : locationProviders){
    Log.d("LocationProviders", provider);
   }

   //---set the criteria for best location provider---
   Criteria c = new Criteria();
   c.setAccuracy(Criteria.ACCURACY_FINE);
   //---or---
   //c.setAccuracy(Criteria.ACCURACY_COARSE);
   c.setAltitudeRequired(false);
   c.setBearingRequired(false);
   c.setCostAllowed(true);
   c.setPowerRequirement(Criteria.POWER_HIGH);

   //---get the best location provider---
   String bestProvider = lm.getBestProvider(c, true);
   Log.d("LocationProviders", "Best provider is " + bestProvider);

   //---get the last know location---
   Location location = lm.getLastKnownLocation(bestProvider);
   if(location != null)
    Log.d("LocationProviders", location.toString());
 }
ホーム
便利堂ロゴ
inserted by FC2 system