У меня возникли проблемы с геолокацией в моем приложении для Android

#java #android #android-studio #geolocation #google-maps-android-api-2

#java #Android #android-studio #геолокация #google-maps-android-api-2

Вопрос:

Я пытаюсь создать приложение с помощью Android Studio, у меня проблема с геолокацией, в частности, я пытаюсь использовать кнопку, чтобы получить местоположение устройства, но это не работает. Это код, который я использую:

 public void position(View view) {
        if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
            fusedLocationProviderClient.getLastLocation().addOnCompleteListener(new OnCompleteListener<Location>() {

                public void onComplete(@NonNull Task<Location> task) {
                    Location location = task.getResult();
                    if (location != null) {

                        try {
                            Geocoder geocoder = new Geocoder(MainActivity.this, Locale.getDefault());
                            List<Address> addresses = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 1);
                            latitudine = addresses.get(0).getLatitude();
                            longitudine = addresses.get(0).getLongitude();
                            LatLng localizzazione = (new LatLng(latitudine, longitudine));
                            mMap.addMarker(new MarkerOptions().position(new LatLng(latitudine, longitudine)).icon(BitmapDescriptorFactory.fromResource(R.drawable.posizionegif)));
                            mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(localizzazione, 12));
                        } catch (IOException e) {
                            e.printStackTrace();
                        }

                    }

                }
            });

        } else {
            ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 44);

        }

    }
 

Надеюсь, вы сможете мне помочь. Спасибо 🙂

Комментарии:

1. есть ли у вашего местоположения (широта, долгота) перед вызовом geocoder.getFromLocation (latitude, longitude, 1); ?

2. я так не думаю

Ответ №1:

Посмотрите на это действие. Это работает идеально. Просто добавьте следующие разрешения в файл манифеста

  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
 <uses-permission android:name="android.permission.INTERNET" />

        public class LocationActivity extends AppCompatActivity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_location);
            getLocation();
        }

        String[] permissionList = new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION};

        @Override
        public void onResume() {
            super.onResume();
            if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED amp;amp; ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

                ActivityCompat.requestPermissions(this, permissionList, 101);
            } else {
                LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

                Location location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                if (location != null) {

                    Log.d("tisha==>>", "Latitude = "   location.getLatitude()   " Longitude= "   location.getLongitude());

                    Geocoder geocoder = new Geocoder(this);
                    try {
                        List<Address> addresses = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 10);
                        if (addresses != null amp;amp; !addresses.isEmpty()){
                            Address address = addresses.get(0);
                            Log.d("tisha==>>","Country Code= " address.getCountryCode());
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }

        private void getLocation() {
            LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

            if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED amp;amp; ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(this, permissionList, 101);
            } else {
                Location location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                if (location != null) {
                    Log.d("tisha==>>", "Lat = "   location.getLatitude()   " Long= "   location.getLongitude());
                }
            }
        }

        @Override
        public void onRequestPermissionsResult(int requestCode, String[] permissions,
                                               int[] grantResults) {
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
            if (requestCode == 101) {
                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

                    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED amp;amp; ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
                        Location location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                        if (location != null) {
                            Log.d("tisha==>>", "Latitude = "   location.getLatitude()   " Longitude= "   location.getLongitude());
                        }
                    }
                }else {
                    ActivityCompat.requestPermissions(this, permissionList, 101);
                }
            }
        }
    }