Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Trying to use the google-play-services_lib library but getting errors such as 'GooglePlayServicesClient not resolved to a type'

What I have done

I'm working through these tutorials:

  • developer.android.com/training/location/index.html
  • developer.android.com/google/play-services/setup.html
  • developer.android.com/tools/projects/projects-eclipse.html#ReferencingLibraryProject

and I guess where I am stuck is the 'Declaring library components in the manifest file' in the above page.

I'm guessing that this means that the library has not been imported correctly or that I am not declaring something. In fact, I would wager that it is my fault and I probably need to declare things in the manifest file or something. However, all my googling of 'declare activity googleplayservices manifest' leads me to believe that maybe there is nothing to declare for this library - otherwise surely I would have come across SOME kind of example?

sdk manager

Google play services are installed
Google apis are installed
There are no updates to be installed, so it can't be that there is anything out of date.

importing the library project

I have imported the library (right clicked on my project > properties > android > add > play services lib).
Tried with the 'is library' check box both ticked and unticked to no avail.

cleaning the project & library project

I have installed and used the project > clean function multiple times
Eclipse/ADT has been restarted multiple times

ERRORS:

Description Resource    Path    Location    Type
GooglePlayServicesClient cannot be resolved to a type   MainActivity.java   /Atapp/src/com/atdev/atapp  line 21 Java Problem

Description Resource    Path    Location    Type
mLocationClient cannot be resolved  MainActivity.java   /Atapp/src/com/atdev/atapp  line 184    Java Problem

Description Resource    Path    Location    Type
Syntax error on token "mCurrentLocation", VariableDeclaratorId expected after this token    MainActivity.java   /Atapp/src/com/atdev/atapp  line 162    Java Problem

Description Resource    Path    Location    Type
The method onConnectionFailed(ConnectionResult) of type MainActivity must override or implement a supertype method  MainActivity.java   /Atapp/src/com/atdev/atapp  line 126    Java Problem

(among others).

Thanks for the advice in advance. First post so I hope I have asked correctly and been clear.

CODE

Manifest file:

    <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.atdev.atapp"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.atdev.atapp.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.atdev.atapp.Venue"
            android:label="@string/title_activity_venue"
            android:parentActivityName="com.atdev.atapp.MainActivity" >
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.atdev.atapp.MainActivity" />
        </activity>
    </application>

</manifest>

Main Activity java:

    package com.atdev.atapp;

    import android.app.Activity;
    import android.app.Dialog;
    import android.content.Intent;
    import android.content.IntentSender;
    import android.location.Location;
    import android.os.Bundle;
    import android.support.v4.app.DialogFragment;
    import android.util.Log;
    import android.view.Menu;
    import android.view.View;
    import android.widget.EditText;
    import android.widget.Toast;

    import com.google.android.gms.common.ConnectionResult;
    import com.google.android.gms.common.GooglePlayServicesUtil;
    import com.google.android.gms.location.LocationClient;

    public class MainActivity extends Activity implements
    GooglePlayServicesClient.ConnectionCallbacks,
    GooglePlayServicesClient.OnConnectionFailedListener {

    // ************************************************************************

    // GLOBAL CONSTANTS

        // Define a request code to send to Google Play services. This code is returned in Activity.onActivityResult
        private final static int CONNECTION_FAILURE_RESOLUTION_REQUEST = 9000;

        // Set the contents of the venue search field to this string
        public final static String VENUE_SEARCH = "com.atroom.atroom.MESSAGE";

        // Global variable to hold the current location
        Location mCurrentLocation;

        // Define a DialogFragment that displays the google play services error dialog
        public static class ErrorDialogFragment extends DialogFragment {
            // Global field to contain the error dialog
            private Dialog mDialog;
            // Default constructor. Sets the dialog field to null
            public ErrorDialogFragment() {
                super();
                mDialog = null;
            }
            // Set the dialog to display
            public void setDialog(Dialog dialog) {
                mDialog = dialog;
            }
            // Return a Dialog to the DialogFragment.
            @Override
            public Dialog onCreateDialog(Bundle savedInstanceState) {
                return mDialog;
            }
        }

    // ********************************************************************************

    // GOOGLE PLAY SERVICES METHODS

        // Handle results returned to the FragmentActivity by Google Play services
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            // Decide what to do based on the original request code
            switch (requestCode) {
                case CONNECTION_FAILURE_RESOLUTION_REQUEST :
                    // If the result code is Activity.RESULT_OK, try to connect again
                    switch (resultCode) {
                        case Activity.RESULT_OK :
                        // Try the request again
                        break;
                    }
            }
        }

        // Do the following to test whether Google Play Services are available and take relevant action
        private boolean servicesConnected() {
            // Check that Google Play services is available
            int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
                // If Google Play services is available
                if (ConnectionResult.SUCCESS == resultCode) {
                    // In debug mode, log the status
                    Log.d("Location Updates","Google Play services is available.");
                    // Continue
                    return true;
                // Google Play services was not available for some reason
                } else {
                    // Get the error code
                    int errorCode = connectionResult.getErrorCode();
                    // Get the error dialog from Google Play services
                    Dialog errorDialog = GooglePlayServicesUtil.getErrorDialog(
                            errorCode,
                            this,
                            CONNECTION_FAILURE_RESOLUTION_REQUEST);
                    // If Google Play services can provide an error dialog
                    if (errorDialog != null) {
                        // Create a new DialogFragment for the error dialog
                        ErrorDialogFragment errorFragment =
                                new ErrorDialogFragment();
                        // Set the dialog in the DialogFragment
                        errorFragment.setDialog(errorDialog);
                        // Show the error dialog in the DialogFragment
                        errorFragment.show(getSupportFragmentManager(),
                                "Location Updates");
                    }
                }
        }

        // Location Services calls the following on successful connection to client
        @Override
        public void onConnected(Bundle dataBundle) {
        // Display the connection status
        Toast.makeText(this, "Connected", Toast.LENGTH_SHORT).show();
        }

        // Location Services calls the following if connection to the location client drops because of an error.
        @Override
        public void onDisconnected() {
            // Display the connection status
            Toast.makeText(this, "Disconnected. Please re-connect.",
                    Toast.LENGTH_SHORT).show();
        }

        // Location Services calls the following if the attempt to connect to Location Services fails
        @Override
        public void onConnectionFailed(ConnectionResult connectionResult) {
            /*
             * Google Play services can resolve some errors it detects.
             * If the error has a resolution, try sending an Intent to
             * start a Google Play services activity that can resolve
             * error.
             */
            if (connectionResult.hasResolution()) {
                try {
                    // Start an Activity that tries to resolve the error
                    connectionResult.startResolutionForResult(
                            this,
                            CONNECTION_FAILURE_RESOLUTION_REQUEST);
                    /*
                     * Thrown if Google Play services canceled the original
                     * PendingIntent
                     */
                } catch (IntentSender.SendIntentException e) {
                    // Log the error
                    e.printStackTrace();
                }
            } else {
                /*
                 * If no resolution is available, display a dialog to the
                 * user with the error.
                 */
                showErrorDialog(connectionResult.getErrorCode());
            }
        }


    // *************************************************************************************

    // LOCATION CONNECTION METHODS

        // Set the current location to the last known location while a new location is being sought
        mCurrentLocation = mLocationClient.getLastLocation();


    // *************************************************************************************

    // ACTIVITY METHODS

        // Do the following when the activity is created
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main); 
            // Create a new location client, using the enclosing class to handle callbacks
            mLocationClient = new LocationClient(this, this, this);
        }

        // Do the following when the Activity becomes visible.
        @Override
        protected void onStart() {
            super.onStart();
            // Connect the client. This is in 'onStart' not 'onCreate' as we want to connect whenever
            // the activity becomes visible, not just when the activity is started for the first time.
            mLocationClient.connect();
        }

        // Do the following when the Activity is no longer visible.
        @Override
        protected void onStop() {
            // Disconnecting the client invalidates it. This saves battery - we don't want the location
            // to run in the background when the app/activity is not in use.
            mLocationClient.disconnect();
            super.onStop();
        }

        // Do the following when the menu is created
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }

        // Do the following when the Venue Search button is clicked
        public void sendVenueSearch (View view) {
            Intent intent = new Intent(this, Venue.class);
            EditText editText = (EditText) findViewById(R.id.venue_search);
            String message = editText.getText().toString();
            intent.putExtra(VENUE_SEARCH, message);
            startActivity(intent);
        }

}

Main activity xml:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <EditText
        android:id="@+id/venue_search"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toLeftOf="@+id/button1"
        android:ems="10"
        android:hint="@+id/venue_search" >

        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/venue_search"
        android:layout_alignParentRight="true"
        android:layout_marginBottom="34dp"
        android:layout_marginRight="31dp"
        android:onClick="sendVenueSearch"
        android:text="@string/button_venue_search" />

    <ListView
        android:id="@+id/venueList"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/venue_search"
        android:layout_below="@+id/button1" >
    </ListView>

</RelativeLayout>
like image 476
pykrete Avatar asked Jun 19 '13 07:06

pykrete


1 Answers

I had the same issue with implementing GooglePlayServicesClient.ConnectionCallbacks as it couldn't resolve the import but simply removing the GooglePlayServicesClient. prefix and re-organising the imports corrected it.

like image 152
saywhatnow Avatar answered Sep 28 '22 14:09

saywhatnow