FusedLocationProviderClient не возвращает местоположение - PullRequest
0 голосов
/ 28 марта 2019

Я использую FusedLocationProviderClient, чтобы получить широту и долготу при нажатии кнопки.Но когда я нажимаю кнопку, это ничего не показывает.Просто приложение продолжает загружаться вечность.Может ли кто-нибудь показать мне, где я делаю неправильно в коде?

Это код:

public class MainActivity extends AppCompatActivity {

    Button showLocation;
    TextView getLat, getLong;

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

        showLocation = findViewById(R.id.btnShowLocation);
        getLat = findViewById(R.id.getLat);
        getLong = findViewById(R.id.getLong);
    }

    public void getlocation(View v) {
        final ProgressDialog progressDialog=new ProgressDialog(MainActivity.this);
        progressDialog.setMessage("Getting Location");
        progressDialog.setCancelable(false);
        progressDialog.show();
        FusedLocationProviderClient fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(MainActivity.this);
        if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(MainActivity.this, 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;
        }
        Task<Location> task = fusedLocationProviderClient.getLastLocation();
        task.addOnSuccessListener(new OnSuccessListener<Location>() {
            @Override
            public void onSuccess(Location location) {
                if(location!=null)
                {
                    String lati=String.valueOf(location.getLatitude());
                    getLat.setText(lati);

                    String longi=String.valueOf(location.getLongitude());
                    getLat.setText(longi);

                    Toast.makeText(MainActivity.this,"Location Found !!!",Toast.LENGTH_LONG).show();
                    progressDialog.cancel();
                }
                else
                    Toast.makeText(MainActivity.this,"Please Enable GPS And Internet !!!",Toast.LENGTH_LONG).show();
            }
        });
    }
}

1 Ответ

0 голосов
/ 28 марта 2019

Я использовал FusedLocation в одном из моих проектов Kotlin, я опубликую метод ниже.

Убедитесь, что ваша служба определения местоположения включена, и у пользователя уже запрашивается разрешение на доступ к местоположению, иначе не может быть обнаружено последнее местоположение.

fun getLocation(): Task<Location>? {
    val mFusedLocationProviderClient: FusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(dashboardActivity)
    if (ActivityCompat.checkSelfPermission(dashboardActivity, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(dashboardActivity, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
    }
    val location = mFusedLocationProviderClient.lastLocation
    location.addOnCompleteListener { task ->
        if (task.isSuccessful) {
            val currentLocation = task.result
            if (currentLocation != null) {
                latitude = currentLocation.latitude
                longitude = currentLocation.longitude
                dashboardActivity.getLatLong(latitude.toString(), longitude.toString()) //this methods calls the collector geo-location service
            } else {

                val builder = AlertDialog.Builder(dashboardActivity)
                builder.setTitle("Location On")

                builder.setPositiveButton("Yes") { dialog, which ->
                    val viewIntent = Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS)
                    dashboardActivity.startActivity(viewIntent)
                }
                builder.setNegativeButton("No") { dialog, which ->
                    Toast.makeText(dashboardActivity, "Please enable location service", Toast.LENGTH_SHORT).show()
                }
                val dialog: AlertDialog = builder.create()
                dialog.show()
            }
        }
    }
    return location
}

Вместо использования addOnSuccessListener() вместо этого я использовал addOnCompleteListener(), я думаю, что это может быть проблемой.

...