Tôi gặp sự cố này trong Xamarin.Android.
Location location = locationManager.GetLastKnownLocation(provider);
trả về giá trị null. Tôi đã kiểm tra mã của mình và biết rằng tôi vừa yêu cầu quyền cho ACCESS_COARSE_LOCATION. Tôi đã thêm mã để yêu cầu quyền cho ACCESS_FINE_LOCATION và bây giờ nó không trả về giá trị rỗng. Đây là mã của tôi:
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");
}
Trong trường hợp bất kỳ ai đến từ Xamarin.Android (C #) sẽ thấy nó hữu ích. Đối với Java hoặc Android Studio mã sẽ withs tương tự một số nhỏ Cú pháp thay đổi như GetLastKnownLocation()
sẽ getLastKnownLocation()
như tên phương pháp trong Java bắt đầu với chữ thường trong khi trong C # tên phương pháp bắt đầu với chữ hoa.