Xamarin.Androidでこの問題が発生しました。
Location location = locationManager.GetLastKnownLocation(provider);
null値を返していました。コードを確認したところ、ACCESS_COARSE_LOCATIONの許可をリクエストしたばかりであることがわかりました。ACCESS_FINE_LOCATIONのアクセス許可をリクエストするコードを追加しましたが、nullが返されませんでした。これが私のコードです:
void AskPermissions()
{
if (CheckSelfPermission(Manifest.Permission.AccessCoarseLocation) != (int)Permission.Granted ||
CheckSelfPermission(Manifest.Permission.AccessFineLocation) != (int)Permission.Granted)
RequestPermissions(new string[] { Manifest.Permission.AccessCoarseLocation, Manifest.Permission.AccessFineLocation }, 0);
else
GetLocation();
}
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
{
if (CheckSelfPermission(Manifest.Permission.AccessCoarseLocation) == (int)Permission.Granted &&
CheckSelfPermission(Manifest.Permission.AccessFineLocation) == (int)Permission.Granted)
GetLocation();
else
Log.Info(tag, "Permission not Granted: Please enter desired Location manually.");
}
void GetLocation()
{
locationManager = (LocationManager)GetSystemService(LocationService);
provider = locationManager.GetBestProvider(new Criteria(), false);
Location location = locationManager.GetLastKnownLocation(provider);
if (location != null)
Log.Info(tag, "Location Lat: " + location.Latitude + " Lon: " + location.Longitude);
else
Log.Info(tag, "Location is null");
}
Xamarin.Android(C#)から来た人がいる場合は、それが便利です。JavaやAndroidのメーカーのためのコードは次のように構文を変更し、いくつかのマイナーな類似しwithsだろうGetLastKnownLocation()
だろうgetLastKnownLocation()
C#でメソッド名は大文字の文字で始まる一方で、Javaのメソッド名は小文字で始まりとして。