Я хочу как можно точнее найти текущую широту и долготу пользователя и отобразить эти данные в TextView в моей функции MainActivity. Тем не менее, приложение всегда возвращает 0.0, 0.0 в качестве широты и долготы.
Я попытался исправить свой AndroidManifest, а также вручную предоставить соответствующие разрешения для приложения.
public class MainActivity extends AppCompatActivity {
TextView mTextViewLocation ;
boolean permission ;
private FusedLocationProviderClient mFusedLocationClient;
private LocationRequest mLocationRequest;
private LocationCallback mLocationCallback;
private double Latitude ;
private double Longitude ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setupGPS();
mTextViewLocation = (TextView)findViewById(R.id.textViewLocation);
mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
mLocationRequest = LocationRequest.create();
mLocationRequest.setInterval(60000);
mLocationRequest.setFastestInterval(20000);
mLocationRequest.setMaxWaitTime(60000);
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
mLocationCallback = new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
if (locationResult == null){
Log.d("Location: GPS","off");
return;
}
for (Location location : locationResult.getLocations()) {
Log.d("locations : " ,location.getLatitude()+"");
Latitude = location.getLatitude();
Longitude = location.getLongitude();
}
}
};
String s = Latitude + " " + Longitude ;
mTextViewLocation.setText(s);
}
public void setupGPS() {
LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
.addLocationRequest(mLocationRequest);
SettingsClient client = LocationServices.getSettingsClient(this);
Task<LocationSettingsResponse> task = client.checkLocationSettings(builder.build());
task.addOnSuccessListener(this, new OnSuccessListener<LocationSettingsResponse>() {
@Override
public void onSuccess(LocationSettingsResponse locationSettingsResponse) {
// All location settings are satisfied. The client can initialize
// location requests here.
// ...
if(PackageManager.PERMISSION_GRANTED == ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION)) {
permission=true;
mFusedLocationClient.requestLocationUpdates(mLocationRequest,
mLocationCallback,null);
}
else {
permission=false;
AlertDialog.Builder alert=new AlertDialog.Builder(MainActivity.this);
alert.setTitle("Permission Denied");
alert.setMessage("You need to enable location permissions for this app.");
alert.setPositiveButton("Continue", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
permission = true ;
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
608);
}
});
alert.setNegativeButton("Later", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
permission=false;
}
});
alert.create().show();
}
}
});
task.addOnFailureListener(this, new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
if (e instanceof ResolvableApiException) {
try {
// Show the dialog by calling startResolutionForResult(),
// and check the result in onActivityResult().
ResolvableApiException resolvable = (ResolvableApiException) e;
resolvable.startResolutionForResult(MainActivity.this,
607);
} catch (IntentSender.SendIntentException sendEx) {
// Ignore the error.
}
}
}
});
}
}
Я хочу, чтобы это отображало мое точное местоположение с точки зрения широты и долготы, но теперь оно отображает «0.0 0.0».
Вот разрешения, которые я дал приложению в AndroidManifest:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-feature android:name="android.hardware.location.gps" />
Я также включил это в Build.gradle моего приложения:
implementation 'com.google.android.gms:play-services-location:16.0.0'