Can anybody help me to solve problem:
onConnected()
method why my
LocationServices.FusedLocationApi.requestLocationUpdates(
mGoogleApiClient, mLocationRequest, this);
code not executing; and retrun from checkSelfPermission()
what can i do to work FusedLocationApi
properly in this code
my code is below
public class JMSCLocationService extends Service implements GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener,
LocationListener {
private final String TAG = "MyAwesomeApp";
private GoogleApiClient mGoogleApiClient;
private LocationRequest mLocationRequest;
// Check Permissions Now
private static final int REQUEST_LOCATION = 2;
//private final double radiusInMeters = 1609.34;
private final double radiusInMeters = 16.34;
LatLng firstLatLong;
Location fLoc;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
Log.i(TAG, "GoogleApiClient connection has STARTED");
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(LocationServices.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
firstLatLong = new LatLng(0, 0);
Log.i(TAG, "GoogleApiClient connection has STARTED");
}
@Override
public void onDestroy() {
// disconnect the client.
if (mGoogleApiClient != null && mGoogleApiClient.isConnected())
mGoogleApiClient.disconnect();
super.onDestroy();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// Connect the client.
if (mGoogleApiClient != null && !mGoogleApiClient.isConnected()) {
mGoogleApiClient.connect();
Log.i(TAG, "GoogleApiClient mGoogleApiClient.connect();");
}
if (mGoogleApiClient.isConnected()) {
Log.i(TAG, "GoogleApiClient mGoogleApiClient.isConnected();");
}
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onConnected(@Nullable Bundle bundle) {
mLocationRequest = LocationRequest.create();
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
mLocationRequest.setInterval(1000); // Update location every second
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) {
// 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;
}
LocationServices.FusedLocationApi.requestLocationUpdates(
mGoogleApiClient, mLocationRequest, this);
}
@Override
public void onConnectionSuspended(int i) {
Log.i(TAG, "GoogleApiClient connection has been suspend");
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
Log.i(TAG, "GoogleApiClient connection has failed");
}
@Override
public void onLocationChanged(Location mCurrentLocation) {
Log.i(TAG, "GoogleApiClient Location received: " + mCurrentLocation.toString());
//test outside
double mLatitude = mCurrentLocation.getLatitude();
double mLongitude = mCurrentLocation.getLongitude();
if(firstLatLong.latitude == 0.0 && firstLatLong.longitude == 0.0){
firstLatLong = new LatLng(mLatitude,mLongitude);
fLoc=new Location(mCurrentLocation);
}
float[] results = new float[1];
Location.distanceBetween(firstLatLong.latitude, firstLatLong.longitude,
mLatitude, mLongitude, results);
float distanceInMeters = fLoc.distanceTo(mCurrentLocation);
try{
if( distanceInMeters > radiusInMeters ){
Toast.makeText(getBaseContext(), "Outside, distance from center", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getBaseContext(), "Inside, distance from center", Toast.LENGTH_LONG).show();
}
}catch (Exception ex){
ex.printStackTrace();
}
}
}
You have to request the permissions. You are just checking whether your app has the permission.
You are ignoring the result of
checkSelfPermission()
in your code.Read the comments, they are self explanatory.
Read about requesting runtime permissions from :
Edit 1
I think by ...but at compile time in service it's gives error for must use selfcheck permission you mean the Lint warnings.
You can suppress them by adding
@SuppressWarnings("MissingPermission")
on top of the method in which you are callingrequestLocationUpdates()
.But make sure you have are calling
requestLocationUpdates()
iff you have the permission for it (Mind theif..else
block).