これに関するいくつかの質問を読みましたが、必要な答えを見つけることができませんでした。
そのため、マップをセットアップし、現在のGPS位置を取得したい場合があります。変数がNULLではないことを確認しましたが、まだ次の結果が得られています。
getLastKnownLocation(provider, false);
しかし、私にヌルを与えますので、これは私が助けを必要とする場所です。 COARSE + FINEロケーションの許可を追加しました。しかし、電話料金の予測できないデータフロー費用についてはあまり満足していないため、通常、電話ではあらゆる種類のネットワークデータが無効になっています。そのため、このテストではWiFiのみを有効にして接続しています。
これを可能にするために、さらに有効にする必要があるものはありますか? WiFiで十分だと思いますか?
このメソッドを使用して、最後の既知の場所を取得します。
LocationManager mLocationManager;
Location myLocation = getLastKnownLocation();
private Location getLastKnownLocation() {
mLocationManager = (LocationManager)getApplicationContext().getSystemService(LOCATION_SERVICE);
List<String> providers = mLocationManager.getProviders(true);
Location bestLocation = null;
for (String provider : providers) {
Location l = mLocationManager.getLastKnownLocation(provider);
if (l == null) {
continue;
}
if (bestLocation == null || l.getAccuracy() < bestLocation.getAccuracy()) {
// Found best last known location: %s", l);
bestLocation = l;
}
}
return bestLocation;
}
新しい場所APIと古い場所APIを混在させるべきではありません。
最後の既知の場所を取得するには、電話するだけです
compile "com.google.Android.gms:play-services-location:11.0.1"
mLocationClient.getLastLocation();
位置情報サービスが接続された後。
新しいロケーションAPIの使用方法を読む
http://developer.Android.com/training/location/retrieve-current.html#GetLocation
private void getLastLocationNewMethod(){
FusedLocationProviderClient mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
mFusedLocationClient.getLastLocation()
.addOnSuccessListener(new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
// GPS location can be null if GPS is switched off
if (location != null) {
getAddress(location);
}
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d("MapDemoActivity", "Error trying to get last GPS location");
e.printStackTrace();
}
});
}
ネットワークプロバイダーからキャッシュされた場所を取得しようとしています。有効な修正が得られるまで、数分待つ必要があります。ネットワークプロバイダーのキャッシュは空なので、明らかにそこにnullが表示されます。
これを試してみてください:-
LocationManager mLocationManager;
Location myLocation = getLastKnownLocation();
private Location getLastKnownLocation() {
Location oldLoc;
while (true){
oldLoc = mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (oldLoc == null){
continue;
}
else {
break;
}
}
return oldLoc;
}
GPS_PROVIDERの代わりにNETWORK_PROVIDERを使用して、結果を高速化できます。
このコードを追加
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
before関数:
locationManagerObject.requestLocationUpdates(LocationManager.GPS_PROVIDER, MINIMUM_TIME_BETWEEN_UPDATES, MINIMUM_DISTANCE_CHANGE_FOR_UPDATES, new LocationListener())
および関数:locationManagerObject.getLastKnownLocation(LocationManager.GPS_PROVIDER)