În aplicația mea Vreau pentru a obține locația curentă cu adresa completă. În cazul meu eu sunt obtinerea de locație în versiunea Android mai puțin de 6.0
final FloatingActionButton btn = view.findViewById(R.id.locAndDate);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (checkPermission(TXT_LOCATION) != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION)) {
showPermissionExplanantion(TXT_LOCATION);
} else if (!permission.checkPermissionPrefrences(location)) {
requestPermission(TXT_LOCATION);
permission.updatePermission(location);
} else {
Toast.makeText(getActivity(), Please allow Location Permission in you device setting, Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(getActivity(), Location Permission Granted, Toast.LENGTH_SHORT).show();
getLocation();
}
}
});
return view;
}
void getLocation() {
try {
locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 50000, 5, this);
} catch (SecurityException e) {
e.printStackTrace();
}
}
@Override
public void onLocationChanged(Location location) {
geocoder = new Geocoder(getActivity(), Locale.getDefault());
List<Address> addresseslList;
try {
addresseslList = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 1);
str += addresseslList.get(0).getAddressLine(0);
} catch (IOException e) {
e.printStackTrace();
}
loc.setText(str);
System.out.print(str);
}
@Override
public void onProviderDisabled(String provider) {
Toast.makeText(getActivity(), Please Enable GPS and Internet, Toast.LENGTH_SHORT).show();
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
/*Check Permission*/
private int checkPermission(int permission) {
int status = PackageManager.PERMISSION_DENIED;
switch (permission) {
case TXT_LOCATION:
status = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION);
break;
}
return status;
}
/*Request Permission*/
private void requestPermission(int permission) {
switch (permission) {
case TXT_LOCATION:
ActivityCompat.requestPermissions(getActivity(), new String[]{ Manifest.permission.ACCESS_COARSE_LOCATION}, REQUEST_LOCATION);
break;
}
}
/*Explaination*/
private void showPermissionExplanantion(final int permission) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
if (permission == TXT_LOCATION) {
builder.setMessage(This app need to access you current location.. please allow);
builder.setTitle(Location Permission Needed);
}
builder.setPositiveButton(try again, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (permission == TXT_LOCATION) {
requestPermission(TXT_LOCATION);
}
}
});
builder.setNegativeButton(cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
AlertDialog alertDialog = builder.create();
alertDialog.show();
}
Permisiunea Manifest
<uses-permission android:name=android.permission.ACCESS_FINE_LOCATION></uses-permission>
<uses-permission android:name=android.permission.ACCESS_COARSE_LOCATION></uses-permission>
Eu nu primesc nici o ieșire Pixel XL, dar când am verifica pe emulator de pixeli în studio Android și alte dispozitive (mi redmi versiunea Android 6.0) funcționează bine. vă rugăm să verificați și să-mi spuneți unde am greșit.
- Locația nu funcționează pe xl pixeli
- Serviciul de localizare dura mult timp.
- De ce valoare nulă se apropie, mai jos am adăugat afară pune
Vă mulțumim pentru a vă ajuta













