Wi-FiとGPSの切り替えができない

977 views
Skip to first unread message

katodaic...@gmail.com

unread,
Jun 21, 2011, 7:13:20 AM6/21/11
to android-g...@googlegroups.com

Kdkatoと申します。

 

現在位置情報を取得するAndroidアプリを作成中なのですが、

屋内だとGPSが受信できないためGPSが受信できない環境ではWiFiに切り替えて位置情報を

取得したいと考えています。

 

そこで、以下のURLを参考にプログラムを実行してみたのですが、

GPSを取得している状態で地下鉄などに入っても測位方法がWiFiに切り替わらない状況です。

(他のアプリケーションではGPSWiFiGPSに切り替わっている)

また、アプリケーションを再起動したときには切り替わる、初めの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;

              }

 

}

 

 

トムキャット

unread,
Jun 21, 2011, 10:25:27 PM6/21/11
to 日本Androidの会
トムキャットです。

「いまどこ?」というアプリでは、次のようにしています。

・GPSの設定のオンオフはアプリからできない(できる場合でもすべきでない)ので、ユーザーにオン
 にしておいてもらいます。
・位置情報の取得にネットワークを使う、という設定もオンにしておいてもらいます。
・位置情報の取得開始時に、WiFiがオフだったらアプリでオンにします。これは公式に許可されて
 います。
・location providerに、つまるところ、GPSとネットワークがありますが、その両方を同時に使用して
 位置情報を取得します。
・最大で2つの位置情報が取得できます。取得できた情報を吟味して、何を使うべきか判断します。
 この部分には正解はないと思います。

location providerは端末により、その振る舞いが違います。複数の端末でいろんな条件で実際の振る舞いを確認した方がいいと思いま
す。


On 6月21日, 午後8:13, <katodaichiwind...@gmail.com> wrote:
> Kdkatoと申します。
>
> 現在位置情報を取得するAndroidアプリを作成中なのですが、
>
> 屋内だとGPSが受信できないためGPSが受信できない環境ではWiFiに切り替えて位置情
> 報を
>
> 取得したいと考えています。
>
> そこで、以下のURLを参考にプログラムを実行してみたのですが、
>
> GPSを取得している状態で地下鉄などに入っても測位方法がWiFiに切り替わらない状
> 況です。

katodaic...@gmail.com

unread,
Jun 22, 2011, 10:12:01 AM6/22/11
to android-g...@googlegroups.com
Kdkatoです。

位置情報をGPSとWifiの両方を同時に使用して位置情報を取得できるのは初めて聞い
たので、
早速調査してみたいと思います。
ありがとうございます。

トムキャットです。

「いまどこ?」というアプリでは、次のようにしています。

--
このメールは Google グループのグループ「日本Androidの会」の登録者に送られて
います。
このグループに投稿するには、android-g...@googlegroups.com にメールを
送信してください。
このグループから退会するには、
android-group-j...@googlegroups.com にメールを送信してくださ
い。
詳細については、http://groups.google.com/group/android-group-japan?hl=ja
らこのグループにアクセスしてください。


Kazuo Ohashi

unread,
Jan 28, 2019, 11:10:38 PM1/28/19
to 日本Androidの会


2011年6月22日水曜日 11時25分27秒 UTC+9 トムキャット:

Kazuo Ohashi

unread,
Jan 28, 2019, 11:10:38 PM1/28/19
to 日本Androidの会


2011年6月22日水曜日 11時25分27秒 UTC+9 トムキャット:

Kazuo Ohashi

unread,
Jan 28, 2019, 11:10:38 PM1/28/19
to 日本Androidの会
トムキャットさん。
こんにちは。
現在、見守り端末を作っているのですが、GPSとWi-Fiと基地局を取り混ぜた、端末機を作りたいと思っているのですが、
出来るのでしょうか?

宜しくお願いします。



2011年6月22日水曜日 11時25分27秒 UTC+9 トムキャット:

Kazuo Ohashi

unread,
Jan 28, 2019, 11:10:38 PM1/28/19
to 日本Androidの会


2011年6月22日水曜日 23時12分01秒 UTC+9 katodaic...@gmail.com:
Kdkatoです。

位置情報をGPSとWifiの両方を同時に使用して位置情報を取得できるのは初めて聞い
たので、
早速調査してみたいと思います。
ありがとうございます。

トムキャットです。

「いまどこ?」というアプリでは、次のようにしています。

このグループに投稿するには、android-group-ja...@googlegroups.com にメールを
送信してください。
このグループから退会するには、
android-group-japan+unsub...@googlegroups.com にメールを送信してくださ

Reply all
Reply to author
Forward
0 new messages