Android locationManager return NULL value - java

locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
mprovider = locationManager.getBestProvider(criteria, false);
if (mprovider != null && !mprovider.equals("")) {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
Location location = locationManager.getLastKnownLocation(mprovider);
locationManager.requestLocationUpdates(mprovider, 1000, 15, SupplierList.this);
if (location != null)
onLocationChanged(location);
else
Toast.makeText(getBaseContext(), "No Location Provider Found Check Your Code", Toast.LENGTH_SHORT).show();
}
Location manager is always returning null value,Can you help me what is the issue in my code?

Related

Can't get current location of last known location for my app

i have an app that can't receive any location. I have to wait for a day in order it get current or last known location. Please help
This app are just like carousell buy and sell app that need log & lat to get location
Below are my code. I'm not good at programming. Still learning. Thanks
// MARK: - GET CURRENT LOCATION ------------------------------------------------------
protected void getCurrentLocation() {
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_LOW);
criteria.setPowerRequirement(Criteria.POWER_LOW);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
assert locationManager != null;
String provider = locationManager.getBestProvider(criteria, true);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
currentLocation = locationManager.getLastKnownLocation(provider);
if (currentLocation != null) {
getCityCountryNames();
// Try to find your current Location one more time
} else {
locationManager.requestLocationUpdates(provider, 1000, 0, this);
}
}
#Override
public void onLocationChanged(Location location) {
if (PermissionsUtils.hasPermissions(this, locationPermissions)) {
return;
}
locationManager.removeUpdates(this);
currentLocation = location;
if (currentLocation != null) {
getCityCountryNames();
// NO GPS location found!
} else {
Configs.simpleAlert(getString(R.string.get_location_failure), AdsListActivity.this);
// Set New York City as default currentLocation
currentLocation = new Location("provider");
currentLocation.setLatitude(Configs.DEFAULT_LOCATION.latitude);
currentLocation.setLongitude(Configs.DEFAULT_LOCATION.longitude);
// Set distance and city labels
String distFormatted = String.format("%.0f", distanceInMiles);
distanceTxt.setText(getString(R.string.ads_list_distance_formatted, distFormatted));
cityCountryTV.setText(getString(R.string.not_available_text_placeholder));
// Call query
queryAds();
}
}

Location fetching

i just used the above code to fetch the location.It just works fine in my test phone nokkia 2 and also in redmi 5a. But it is not working in some other phones
like moto g5, Samsung j6 etc
i just check the permissions and its all good.permission for location is on,
<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" />
these user permissions are given....
Still in some phones,this code is not working..
please help me to find a solution.
private void location() {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(MainActivity.this, "Turn On Location", Toast.LENGTH_SHORT).show();
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);
return;
}else{
Toast.makeText(MainActivity.this, "in", Toast.LENGTH_SHORT).show();
LocationManager mlocManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
boolean enabled = mlocManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
if (!enabled) {
Toast.makeText(this, "please turn on your location", Toast.LENGTH_LONG).show();
}
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
locationManager.getProvider(LocationManager.GPS_PROVIDER);
provider = locationManager.getBestProvider(criteria, false);
if (provider != null && !provider.equals("")) {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
Location location1 = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
Location location2 = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
Location location3 = locationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER);
final int minTime = 1000;
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, minTime, 0, this);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, minTime, 0, this);
locationManager.requestLocationUpdates(LocationManager.PASSIVE_PROVIDER, minTime, 0, this);
if (location1 != null) {
onLocationChanged(location1);
} else if (location2 != null) {
onLocationChanged(location2);
} else if (location3 != null) {
onLocationChanged(location3);
} else {
Toast.makeText(getBaseContext(), "network error..", Toast.LENGTH_SHORT).show();
Log.e("TAG", "your location can't get...." + location1);
}
} else {
Toast.makeText(getBaseContext(), "No Provider Found", Toast.LENGTH_SHORT).show();
}
}
}
try below code instead of LocationManager
FusedLocationProviderClient mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
mFusedLocationClient.getLastLocation()
.addOnSuccessListener(this, new OnSuccessListener<Location>() {
#Override
public void onSuccess(Location location) {
// Got last known location. In some rare situations this can be null.
}
})
.addOnFailureListener(this, new OnFailureListener() {
#Override
public void onFailure(#NonNull Exception e) {
}
});

Move camera to current location OnMapReady (Android Google Maps API)

How do I make the camera move to the current user location as soon as the map opens?
This is how i require the permission for the location:
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
== PackageManager.PERMISSION_GRANTED) {
mMap.setMyLocationEnabled(true);
} else {
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.ACCESS_FINE_LOCATION},MY_LOCATION_REQUEST_CODE);
}
This is in the onCreate function
This code should center the map to the position, you need the geolocation.
CameraPosition cameraPosition = new CameraPosition.Builder()
.target(**LatLng object of your position**) // Sets the center of the map to Geolocation
.zoom(17) // Sets the zoom
.bearing(90) // Sets the orientation of the camera to east
.tilt(30) // Sets the tilt of the camera to 30 degrees
.build(); // Creates a CameraPosition from the builder
map.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
EDIT:
First we create some variables on the top:
private boolean localizationAllowed; //here we save if the user has allowed to locate him.
private boolean localizationRequested = false; // here we save if the localization has already requested.
create some private methods:
private void enableLocationUpdates(String provider) {
if(!localizationRequested) {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CONTACTS},
MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATIONS);
localizationRequested = true;
}
}
if (provider != null && localizationAllowed) {
locationManager.requestLocationUpdates(provider, 1000, 0, this);
}
}
private void disableLocationUpdates() {
if(!localizationRequested) {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CONTACTS},
MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATIONS);
localizationRequested = true;
}
}
if (locationManager != null && localizationAllowed){
locationManager.removeUpdates(this);
}
}
private void initLocalisation(){
if(localizationAllowed) {
LocationManager service = (LocationManager) getSystemService(LOCATION_SERVICE);
if (service != null) {
boolean enabled = service
.isProviderEnabled(LocationManager.GPS_PROVIDER);
// check if enabled and if not send user to the GSP settings
// Better solution would be to display a dialog and suggesting to
// go to the settings
if (!enabled) {
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(intent);
}
// Get the location manager
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
// Define the criteria how to select the locatioin provider -> use
// default
Criteria criteria = new Criteria();
provider = locationManager.getBestProvider(criteria, false);
enableLocationUpdates(provider);
}
}
}
Initialize the localization:
#Override
protected void onCreate(Bundle savedInstanceState) {
//your onCreate methods
initLocalisation();
//your onCreate methods
}
onMapReady to start localization when the map is ready
#Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
Location location = getLastLocation();
if (location != null) {
LatLng you = new LatLng(location.getLatitude(), location.getLongitude());
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(you, 17f));
}
}

Android locationManager return NULL value in Latitude and Longitude

locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
mprovider = locationManager.getBestProvider(criteria, false);
if (mprovider != null && !mprovider.equals("")) {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
Location location = locationManager.getLastKnownLocation(mprovider);
locationManager.requestLocationUpdates(mprovider, 0, 0, SupplierList.this);
// locationManager.requestLocationUpdates(mprovider, 15000, 1, this);
if (location != null)
onLocationChanged(location);
else
// showSettingsAlert();
Toast.makeText(getBaseContext(), "No Location Provider Found Check Your Code", Toast.LENGTH_SHORT).show();
}
public void onLocationChanged(Location location) {
Glat =String.valueOf(location.getLatitude());
Glon =String.valueOf(location.getLongitude());
}
In place of taking mprovider as
mprovider = locationManager.getBestProvider(criteria, false);
take mprovider as mprovider=LocationManager.NETWORK_PROVIDER

Show my current location in the Google Map

Finally I succeed to display the map,Now,I want to show my current location, I tried by using these code but it didn't work when I clicked the my location button in the top right corner.
AndroidManifest.xml
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="com.example.hp.testmap.MAPS_RECEIVE"></uses-permission>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<permission
android:name="com.example.hp.testmap.permission.MAPS_RECEIVE"
android:protectionLevel="signature"/>
<uses-feature
android:glEsVersion="0x00020000"
android:required="true"/>
MapsActivity.java
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
mMap.setMyLocationEnabled(true);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
String provider = locationManager.getBestProvider(criteria, true);
Location myLocation = locationManager.getLastKnownLocation(provider);
mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
double latitude = myLocation.getLatitude();
double longitude = myLocation.getLongitude();
LatLng latLng = new LatLng(latitude, longitude);
mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
mMap.animateCamera(CameraUpdateFactory.zoomTo(20));
return;
}
}
private GoogleApiClient mGoogleApiClient;
private GoogleMap mMap;
Implement this listeners:
LocationListener, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener
onCreateView or onCreate method:
if (mGoogleApiClient == null) {
mGoogleApiClient = new GoogleApiClient.Builder(mActivity)
.addApi(LocationServices.API).addConnectionCallbacks(this)
.addOnConnectionFailedListener(this).build();
mGoogleApiClient.connect();
}
#Override Methods:
#Override
public void onConnected(#Nullable Bundle bundle) {
if (ContextCompat.checkSelfPermission(mActivity, android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED && ContextCompat.checkSelfPermission(mActivity, android.Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
Location mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
if (mLastLocation != null)
onLocationChanged(mLastLocation);
return;
}
}
#Override
public void onLocationChanged(Location location) {
if (location != null) {
mMap.moveCamera(CameraUpdateFactory.newLatLng(new LatLng(location.getLatitude(),location.getLongitude())));
mMap.animateCamera(CameraUpdateFactory.zoomTo(6), 5000, null);
}
}
Hope your task done.
Use this Code for Current Location:
googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(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;
}
googleMap.setMyLocationEnabled(true);
googleMap.getUiSettings().setZoomControlsEnabled(false);
googleMap.getUiSettings().setMyLocationButtonEnabled(true);
googleMap.getUiSettings().setCompassEnabled(true);
googleMap.getUiSettings().setRotateGesturesEnabled(true);
googleMap.getUiSettings().setZoomGesturesEnabled(true);
if (locationManager == null) {
locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
}
if (locationManager.getAllProviders().contains(LocationManager.GPS_PROVIDER)) {
isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
isNetworkProviderEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (isGPSEnabled) {
location = getLastLocationByProvider(locationManager, LocationManager.GPS_PROVIDER, getApplicationContext());
} else if (isNetworkProviderEnabled) {
location = getLastLocationByProvider(locationManager, LocationManager.NETWORK_PROVIDER, getApplicationContext());
}
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
} else {
if (isNetworkProviderEnabled) {
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 100000, 1, this);
provider_info = LocationManager.NETWORK_PROVIDER;
} else if (isGPSEnabled) {
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 100000, 1, this);
provider_info = LocationManager.GPS_PROVIDER;
} else {
alertDialog = Util.showOkDialog(new View.OnClickListener() {
#Override
public void onClick(View view) {
if (Env.currentActivity != null) {
if (Env.currentActivity instanceof LocationActivity) {
try {
gotoSettings();
} catch (Exception e) {
e.printStackTrace();
}
}
}
if (alertDialog != null) {
alertDialog.dismiss();
alertDialog = null;
}
}
}, this.getResources().getString(R.string.location_service_validation));
}
location = locationManager.getLastKnownLocation(provider_info);
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
}
}
MarkerOptions marker = new MarkerOptions().position(
new LatLng(latitude, longitude))
.title(getFullAddressLine(this));
marker.icon(BitmapDescriptorFactory
.defaultMarker(BitmapDescriptorFactory.HUE_GREEN));
googleMap.addMarker(marker);
CameraPosition cameraPosition = new CameraPosition.Builder()
.target(new LatLng(latitude,
longitude)).zoom(15).build();
googleMap.animateCamera(CameraUpdateFactory
.newCameraPosition(cameraPosition));
}
public void showMap() {
mapFragment = (SupportMapFragment)getChildFragmentManager().findFragmentById(R.id.map);
if (map == null) {
map = mapFragment.getMap();
}
// Enable Zoom
map.getUiSettings().setZoomGesturesEnabled(true);
//set Map TYPE
map.setMapType(GoogleMap.MAP_TYPE_NORMAL);
//enable Current location Button
map.setMyLocationEnabled(true);
LocationManager locationManager = (LocationManager)getActivity().getSystemService(getActivity().LOCATION_SERVICE);
Criteria criteria = new Criteria();
String bestProvider = locationManager.getBestProvider(criteria, true);
if (ActivityCompat.checkSelfPermission(getContext(), 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;
}
Location location = locationManager.getLastKnownLocation(bestProvider);
if (location != null) {
onLocationChanged(location);
}
locationManager.requestLocationUpdates(bestProvider, 2000, 0, this);
}
#Override
public void onLocationChanged(Location location) {
latitude= location.getLatitude();
longitude=location.getLongitude();
LatLng loc = new LatLng(latitude, longitude);
if (marker!=null){
marker.remove();
}
marker= map.addMarker(new MarkerOptions().position(loc).title("Sparx IT Solutions"));
map.moveCamera(CameraUpdateFactory.newLatLng(loc));
map.animateCamera(CameraUpdateFactory.newLatLngZoom(loc, 16.0f));
}
#Override
public void onProviderDisabled(String provider) {
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(intent);
Toast.makeText(getActivity().getBaseContext(), "Gps is turned off!!",
Toast.LENGTH_SHORT).show();
}
#Override
public void onProviderEnabled(String provider) {
Toast.makeText(getActivity().getBaseContext(), "Gps is turned on!! ",
Toast.LENGTH_SHORT).show();
}
Use following code:
//Zoom to the current location
public Location getMyLocation() {
LocationManager locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
Location location = locationManager.getLastKnownLocation(locationManager.getBestProvider(criteria, false));
if (location != null) {
map.animateCamera(CameraUpdateFactory.newLatLngZoom(
new LatLng(location.getLatitude(), location.getLongitude()), 13));
CameraPosition cameraPosition = new CameraPosition.Builder()
.target(new LatLng(location.getLatitude(), location.getLongitude())) // Sets the center of the map to location user
.zoom(17) // Sets the zoom
.bearing(90) // Sets the orientation of the camera to east
.tilt(40) // Sets the tilt of the camera to 30 degrees
.build(); // Creates a CameraPosition from the builder
map.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
}
return location;
}
Then call this method insode your onCreate
Hope this helps :)
Read the following documentation- https://developers.google.com/maps/documentation/android-api/location#the_my_location_layer
Possible duplicate of - how to get current location in google map android

Categories