I'm working through these tutorials:
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?
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.
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.
I have installed and used the project > clean function multiple times
Eclipse/ADT has been restarted multiple times
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.
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>
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With