Kdkatoと申します。
現在位置情報を取得するAndroidアプリを作成中なのですが、
屋内だとGPSが受信できないためGPSが受信できない環境ではWiFiに切り替えて位置情報を
取得したいと考えています。
そこで、以下のURLを参考にプログラムを実行してみたのですが、
GPSを取得している状態で地下鉄などに入っても測位方法がWiFiに切り替わらない状況です。
(他のアプリケーションではGPS→WiFi→GPSに切り替わっている)
また、アプリケーションを再起動したときには切り替わる、初めの1回目はうまく切り替わる時があるなど、
どのようなタイミングで切り替えを行うのか全くわからない状態です。
なので、どんな情報でもよいのでご存知の方がいましたらご教授頂けると幸いです。
http://techbooster.jpn.org/andriod/application/2636/
http://www.cozzbox.com/wordpress/archives/203
実際に作成したソースコード
package com.GPSMonitor;
import android.location.Criteria;
import android.location.GpsStatus.Listener;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
/**
*
* @author Daichi Kato
* @version 1.0,27 Apr.,2011
* @see LocationGPS 位置測定
* @category
*/
public class LocationGPS implements LocationListener, Listener {
private int gpscount = -1;
private Location location;
private LocationManager locationService;
Data acount01 = new Data();
private Criteria criteria;
/**
* コンストラクタ(初期設定)
* @param Dataクラスのインスタンス
* */
public LocationGPS(Data acount) {
acount01 = acount;
}
/**
*
* @param locationService ロケーションマネージャのインスタンス
* @param Time 位置情報取得時間間隔
* @param Distant 位置情報取得距離間隔
*/
public void start(LocationManager locationService, int time,int distant) {
this.locationService = locationService;
criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE); // 要求精度
criteria.setPowerRequirement(Criteria.POWER_HIGH); // 許容電力消費
criteria.setSpeedRequired(false); // 速度不要
criteria.setAltitudeRequired(false); // 高度不要
criteria.setBearingRequired(false); // 方位不要
criteria.setCostAllowed(false); // 費用の発生不可?
// 以前に取得した位置情報を取得
this.location = locationService.getLastKnownLocation(locationService.getBestProvider(criteria,true));
Location_point();
locationService.requestLocationUpdates(locationService.getBestProvider(criteria,true), time, distant, this);
}
/**
* 位置情報の更新を受け取る(startでセットした定期的な時間・距離間隔で呼ばれる)
* →位置情報が取得できなかった場合は呼ばれない
* @param Location 位置情報
*/
@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
this.location=location;
Location_point();
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onGpsStatusChanged(int event) {
}
/**
* 位置情報の更新をDATAクラスに通知
*/
private void Location_point() {
if (location == null) {
return;
}
// UDP形式
gpscount++;
acount01.gpscount_input(gpscount);
acount01.Latitude_input(Double.toString(location.getLatitude()));
acount01.Longitude_input(Double.toString(location.getLongitude()));
acount01.Altitude_input(Double.toString(location.getAltitude()));// 高さ
acount01.Accuracy_input(Double.toString(location.getAccuracy()));// 精度
acount01.Provider_input(location.getProvider());// ブロバイダ
}
/**
* 位置情報の更新を終える
*/
public void end() {
locationService.removeUpdates(this);
locationService.removeGpsStatusListener(this);
}
/**
* 位置情報を呼び出し元に返す
* @return location 位置情報
*/
public Location getLocation() {
return location;
}
}
位置情報をGPSとWifiの両方を同時に使用して位置情報を取得できるのは初めて聞い
たので、
早速調査してみたいと思います。
ありがとうございます。
トムキャットです。
「いまどこ?」というアプリでは、次のようにしています。
--
このメールは Google グループのグループ「日本Androidの会」の登録者に送られて
います。
このグループに投稿するには、android-g...@googlegroups.com にメールを
送信してください。
このグループから退会するには、
android-group-j...@googlegroups.com にメールを送信してくださ
い。
詳細については、http://groups.google.com/group/android-group-japan?hl=ja か
らこのグループにアクセスしてください。
Kdkatoです。位置情報をGPSとWifiの両方を同時に使用して位置情報を取得できるのは初めて聞い
たので、
早速調査してみたいと思います。
ありがとうございます。
トムキャットです。
「いまどこ?」というアプリでは、次のようにしています。
このグループに投稿するには、android-group-ja...@googlegroups.com にメールを
送信してください。
このグループから退会するには、
android-group-japan+unsub...@googlegroups.com にメールを送信してくださ