Что я помещаю в LocationManager разрешение вызова if - PullRequest
0 голосов
/ 16 ноября 2018

Я просматривал все стековые потоки и поисковые сайты и нашел так много разных или устаревших ответов, что не знаю, как ответить на этот вопрос.Я пытаюсь получить широту и долготу для моего приложения.Я дошел до того, что знаю, как использовать диспетчер местоположений, но затем он требует разрешения вызовов. Я пытался найти решения о том, как его использовать, но существует так много ответов с таким разным мнением о том, являются ли эти ответыправильный.Вот мой код, может ли кто-нибудь помочь мне найти решение о том, что поставить в разрешение на вызов для менеджера местоположений, и будет ли этот код и получать мне долготу и широту?Результаты будут использованы во фрагменте.

Это разрешения в моем файле манифеста: ACCESS_FINE_LOCATION, INTERNET и ACCESS_COARSE_LOCATION.

 public class LocationFinder extends TestFragment implements LocationListener {

private static final String TAG = "LocationFragment";
private LocationManager mLocationManager;
private static double latitude;
private static double longitude;

public LocationFinder() {


mLocationManager =(LocationManager)getActivity().getSystemService(Context.LOCATION_SERVICE);




    if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        // TODO: Consider calling
        //    ActivityCompat#requestPermissions
        // here to request the missing permissions, and then overriding
        //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
        //                                          int[] grantResults)
        // to handle the case where the user grants the permission. See the documentation
        // for ActivityCompat#requestPermissions for more details.
        return;
    }
    mLocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this);

    mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);

}





@Override

public void onLocationChanged(Location location) {

    latitude = location.getLatitude();

    longitude = location.getLongitude();

}



@Override

public void onStatusChanged(String s) {



}



@Override

public void onProviderEnabled(String s) {



}



@Override

public void onProviderDisabled(String s) {



}

   public static double getLatitude(){
    return latitude;
}

public static double getLongitude(){
    return longitude;
}
}

1 Ответ

0 голосов
/ 16 ноября 2018

Чтобы проверить разрешения приложения для ACCESS_FINE_LOCATION, вы запускаете checkSelfPermission, как вы сделали:

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {  }

Как указано в вашем TODO, вам нужно вызвать requestPermissions:

ActivityCompat.requestPermissions(this, new String[{Manifest.permission.ACCESS_FINE_LOCATION}, 378);

где 378 - любое целое число, которое вам нравится (используется для проверки результата запроса):

Далее результат запроса должен быть обработан с помощью переопределяющего метода:

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    if (requestCode == 378) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // do whatever you need with permissions
        } else {
            // display a message or request again
        }
    }
}
...