Call requires permissions that may be rejected by user
Which SDK do you use? If you use Marshmallow, then you need to check that the user has granted permission for every location call.
Take a look Here.
You should do something like this:
if (ContextCompat.checkSelfPermission( this,android.Manifest.permission.ACCESS_COARSE_LOCATION ) != PackageManager.PERMISSION_GRANTED ){ ActivityCompat.requestPermissions( this, new String [] { android.Manifest.permission.ACCESS_COARSE_LOCATION }, LocationService.MY_PERMISSION_ACCESS_COURSE_LOCATION );}
request permission if you dont have it already.
check the link above for more info.
Try my code:
public class MainActivity extends AppCompatActivity { /* GPS Constant Permission */ private static final int MY_PERMISSION_ACCESS_COARSE_LOCATION = 11; private static final int MY_PERMISSION_ACCESS_FINE_LOCATION = 12; /* Position */ private static final int MINIMUM_TIME = 10000; // 10s private static final int MINIMUM_DISTANCE = 50; // 50m /* GPS */ private String mProviderName; private LocationManager mLocationManager; private LocationListener mLocationListener; @Override protected void onCreate(Bundle savedInstanceState) { ... mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); // Get the best provider between gps, network and passive Criteria criteria = new Criteria(); mProviderName = mLocationManager.getBestProvider(criteria, true); // API 23: we have to check if ACCESS_FINE_LOCATION and/or ACCESS_COARSE_LOCATION permission are granted if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) { // No one provider activated: prompt GPS if (mProviderName == null || mProviderName.equals("")) { startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)); } // At least one provider activated. Get the coordinates switch (mProviderName) { case "passive": mLocationManager.requestLocationUpdates(mProviderName, MINIMUM_TIME, MINIMUM_DISTANCE, this); Location location = mLocationManager.getLastKnownLocation(mProviderName); break; case "network": break; case "gps": break; } // One or both permissions are denied. } else { // The ACCESS_COARSE_LOCATION is denied, then I request it and manage the result in // onRequestPermissionsResult() using the constant MY_PERMISSION_ACCESS_FINE_LOCATION if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED ) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, MY_PERMISSION_ACCESS_COARSE_LOCATION); } // The ACCESS_FINE_LOCATION is denied, then I request it and manage the result in // onRequestPermissionsResult() using the constant MY_PERMISSION_ACCESS_FINE_LOCATION if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED ) { ActivityCompat.requestPermissions(this, new String[] { Manifest.permission.ACCESS_FINE_LOCATION }, MY_PERMISSION_ACCESS_FINE_LOCATION); } } } @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case MY_PERMISSION_ACCESS_COARSE_LOCATION: { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // permission was granted } else { // permission denied } break; case MY_PERMISSION_ACCESS_FINE_LOCATION: { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // permission was granted } else { // permission denied } break; } } }}
Source: LINK
This worked for me
if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { Toast.makeText(YourService.this, "First enable LOCATION ACCESS in settings.", Toast.LENGTH_LONG).show(); return;}locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 100, 1, listener);