felix
felix

Reputation: 454

How do I get the latest Google Play Services version?

I am building an app that will require the user's location. To do this, I need to use google play services. Whenever I run the app on my emulator it tells me that I need to update google play services. This is my build.gradle folder below. Whenever I try to change Google Play Services to a number higher than 8.3.0, I get an error saying android studio couldn't find repository.

apply plugin: 'com.android.application'

android {
compileSdkVersion 23
buildToolsVersion "23.0.1"

defaultConfig {
applicationId "com.example.usinglocationiapi.usinglocationapi"
minSdkVersion 23
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
    minifyEnabled false
    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.0'
compile 'com.google.android.gms:play-services:8.3.0'



}

This is my java code:

import android.content.Intent;
import android.location.Location;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.location.LocationListener;
import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.location.LocationServices;


public class MainActivity extends ActionBarActivity  implements     GoogleApiClient.ConnectionCallbacks,     GoogleApiClient.OnConnectionFailedListener, LocationListener {

private static int REQUEST_CODE_RECOVER_PLAY_SERVICES = 200;

private GoogleApiClient mGoogleApiClient;
private Location mLastLocation;
private LocationRequest mLocationRequest;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    if (checkGooglePlayServices()) {
        buildGoogleApiClient();

        //prepare connection request
        createLocationRequest();
    }
}






private boolean checkGooglePlayServices() {

    int checkGooglePlayServices = GooglePlayServicesUtil
            .isGooglePlayServicesAvailable(this);
    if (checkGooglePlayServices != ConnectionResult.SUCCESS) {
          /*
           * google play services is missing or update is required
           *  return code could be
           * SUCCESS,
           * SERVICE_MISSING, SERVICE_VERSION_UPDATE_REQUIRED,
           * SERVICE_DISABLED, SERVICE_INVALID.
           */
        GooglePlayServicesUtil.getErrorDialog(checkGooglePlayServices,
                this, REQUEST_CODE_RECOVER_PLAY_SERVICES).show();

        return false;
    }

    return true;

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_CODE_RECOVER_PLAY_SERVICES) {

        if (resultCode == RESULT_OK) {
            // Make sure the app is not already connected or attempting to connect
            if (!mGoogleApiClient.isConnecting() &&
                    !mGoogleApiClient.isConnected()) {
                mGoogleApiClient.connect();
            }
        }else if (resultCode == RESULT_CANCELED) {
            Toast.makeText(this, "Google Play Services must be installed.",
                    Toast.LENGTH_SHORT).show();
            finish();
        }
    }
}

protected synchronized void buildGoogleApiClient() {
    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(LocationServices.API)
            .build();

}


@Override
public void onConnected(Bundle bundle) {

    mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
            mGoogleApiClient);
    if (mLastLocation != null) {

        Toast.makeText(this, "Latitude:" + mLastLocation.getLatitude()+", Longitude:"+mLastLocation.getLongitude(),Toast.LENGTH_LONG).show();

    }

    startLocationUpdates();

}

@Override
public void onConnectionSuspended(int i) {

}

@Override
public void onConnectionFailed(ConnectionResult connectionResult) {

}


/* Second part*/

@Override
protected void onStart() {
    super.onStart();

    if (mGoogleApiClient != null) {
        mGoogleApiClient.connect();
    }

}

protected void startLocationUpdates() {
    LocationServices.FusedLocationApi.requestLocationUpdates(
            mGoogleApiClient, mLocationRequest, this);
}

protected void createLocationRequest() {
    mLocationRequest = new LocationRequest();
    mLocationRequest.setInterval(20000);
    mLocationRequest.setFastestInterval(5000);
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
}

@Override
public void onLocationChanged(Location location) {
    mLastLocation = location;
    Toast.makeText(this, "Update -> Latitude:" + mLastLocation.getLatitude()+", Longitude:"+mLastLocation.getLongitude(),Toast.LENGTH_LONG).show();

}

protected void stopLocationUpdates() {
    if (mGoogleApiClient != null) {
        LocationServices.FusedLocationApi.removeLocationUpdates(
                mGoogleApiClient, this);
    }
}

@Override
protected void onPause() {
    super.onPause();
    stopLocationUpdates();
}

@Override
protected void onStop() {
    super.onStop();

    if (mGoogleApiClient != null) {
        mGoogleApiClient.disconnect();
    }


}

}

Upvotes: 1

Views: 3571

Answers (2)

Kuffs
Kuffs

Reputation: 35651

The message you are seeing is telling you to update Play Services on the Emulator not in your development environment.

Full instructions for handling this are in the documentation: https://developers.google.com/android/guides/setup

ybeldi's answer gives you a head start but here is the extract from the docs:

Another approach is to use the isGooglePlayServicesAvailable() method. You might call this method in the onResume() method of the main activity. If the result code is SUCCESS, then the Google Play services APK is up-to-date and you can continue to make a connection. If, however, the result code is SERVICE_MISSING, SERVICE_VERSION_UPDATE_REQUIRED, or SERVICE_DISABLED, then the user needs to install an update. In this case, call the getErrorDialog() method and pass it the result error code. The method returns a Dialog you should show, which provides an appropriate message about the error and provides an action that takes the user to Google Play Store to install the update.

Upvotes: 0

Yassine BELDI
Yassine BELDI

Reputation: 572

if your are app use google play services 8.3 you should also add a verification methode in your onResume() to invite the user to update or install the version8.3

    public boolean checkPlayServices() {
    int resultCode = GooglePlayServicesUtil
            .isGooglePlayServicesAvailable(this);
    if (resultCode != ConnectionResult.SUCCESS) {
        if (GooglePlayServicesUtil.isUserRecoverableError(resultCode)) {
            GooglePlayServicesUtil.getErrorDialog(resultCode, this,
                    PLAY_SERVICES_RESOLUTION_REQUEST).show();
        }
        return false;
    }
    return true;
}

Upvotes: 1

Related Questions