2

定期的にユーザーの位置を追跡する必要があります。

このために、サービスのonCreateメソッドでrequestLocationUpdates()を呼び出しています。

@Override
public void onCreate()
{
LocationManager aLocationManager = (LocationManager) getApplicationContext().getSystemService(Context.LOCATION_SERVICE);

aLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME, MIN_DISTANCE, new LocationListener(LocationManager.GPS_PROVIDER));
}

通常、私はこのGPS_PROVIDERを介して定期的に位置情報を更新します。ただし、一部の地域では、位置情報を正しく取得できませんでした。そのような点で、私はrequestLocationUpdates呼び出しをNETWORK_PROVIDERを使用するように切り替えるのが好きです。

そのため、GPS_PROVIDERから適切な位置情報を取得できない場合は、requestLocationUpdatesを切り替えてNETWORK_PROVIDERを使用できます。

これどうやってするの?ある種の条件をチェックして、onStatusChanged()のrequestLocationUpdates()を変更するのは正しいですか?

提案をお願いします。

ありがとうございました。

4

2 に答える 2

2

はいそれを行う方法があります。GPSプロバイダーが利用可能かどうかを確認できlocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) 、falseの場合は、ネットワークプロバイダーを使用します

onProviderEnabled()とonProviderDisabled()をオーバーライドして、GPSからネットワーク平均に切り替えることもできます。ライブラリを使用する場合は、この位置追跡ライブラリを使用できます https://github.com/nagendraksrivastava/Android-Location-Tracking-Library その素敵なライブラリと完璧に動作します

これがすべてのプロバイダーのリストを取得するためのコードであり、それに基づいてデータを取得するため、この場合はプロバイダーについて心配する必要があります

LocationManager mLocationManager = new LocationManager()
List<String> matchingProviders = mLocationManager.getProviders(true);
for(String provider : matchingProviders ){
Location location = mLocationManager.getLastKnownLocation(provider);
if(location != null){
double lat = location.getLatitude();
}
于 2013-03-25T13:01:22.763 に答える
1

このコードを試してみてください...

void currentlocation(){
    LocationManager locationManager = (LocationManager) getApplicationContext().getSystemService(Context.LOCATION_SERVICE);
    LocationListener locationListener = new LocationListener() {
        public void onLocationChanged(Location location) {
            // Called when a new location is found by the network location provider.
            MyContants.lat = location.getLatitude();
            MyContants.lon = location.getLongitude();
            //  Log.w(MyContants.ScanResult_TAG, "Currnet Location==="+String.valueOf(lat)+"-----"+String.valueOf(lon));
        }
        public void onStatusChanged(String provider, int status, Bundle extras) {}
        public void onProviderEnabled(String provider) {}
        public void onProviderDisabled(String provider) {}

    };


    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
    //GPS location updates.
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
}

使用許可

 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
于 2013-03-25T13:00:19.553 に答える