In dieser Klasse verbunden ,:GoogleApiClient Ausgabe: GoogleApiClient ist noch nicht
public class Presence implements ConnectionCallbacks,
OnConnectionFailedListener, LocationListener
Ich habe die folgende Konstruktor:
private Presence(Context context)
{
this.context = context;
gApiClient = new GoogleApiClient.Builder(context, this, this)
.addApi(LocationServices.API)
.build();
if (!gApiClient.isConnecting() && !gApiClient.isConnected())
{
gApiClient.connect();
}
} // of constructor()
ich es verwenden, um eine Singleton
Instanz zurückzugeben:
public static synchronized Presence getInstance(Context context)
{
if (presenceSingleton == null)
presenceSingleton = new Presence(context);
return presenceSingleton;
}
Die onConnected()
sieht so aus:
@Override
public void onConnected(Bundle connectionHint)
{
Log.e(LOG_TAG, "In onConnected(), gApiClient.isConnected(): " +
gApiClient.isConnected());
createLocationRequest();
getLocation();
getSubLocality();
} // of onConnected()
Basierend auf einer der Benutzereinstellungen in der App machen, kann ich die folgende Methode aufrufen, die App in einem sogenannten Auto-Pilot-Modus zu versetzen, wo es beginnt die Position des Benutzers Tracking:
public void startLocationUpdates()
{
// Prints 'false' in the logs:
Log.e(LOG_TAG, "In startLocationUpdates(), gApiClient.isConnected(): " + gApiClient.isConnected());
Intent locationChangeIntent = new Intent(context, LocationTracker.class);
pendingIntent = PendingIntent.getService(context, 188, locationChangeIntent, PendingIntent.FLAG_UPDATE_CURRENT);
// Crash points to the following line:
LocationServices.FusedLocationApi.requestLocationUpdates(gApiClient, locationRequest, pendingIntent);
} // of startLocationUpdates()
in der Haupttätigkeit, mache ich eine Instanz der Klasse oben in den onCreate()
:
public class MainClass extends AppCompatActivity implements
OnSharedPreferenceChangeListener
{
....
....
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
getAppSettings();
presence = Presence.getInstance(getApplicationContext());
....
....
startApp();
....
}
private void startApp()
{
if (pref_autoPilot)
presence.startLocationUpdates();
}
....
....
....
} // of class MainClass
Wenn der Benutzer den Autopiloten-Präferenz setzt die App stürzt mit folgenden Ausnahme:
java.lang.IllegalStateException: GoogleApiClient is not connected yet.
an der in der obigen Methode angegebenen Linie startLocationUpdates()
.
Ich habe eine Menge Antworten gelesen, konnte aber keine Lösung für dieses Problem finden. Kannst du bitte darauf hinweisen, was ich falsch mache? Ist es, dass die Presence
Klasse in einem AppCompatActivity
oder FragmentActivity
oder ähnlichem sein sollte, und kann nicht unabhängig sein wie hier? Bitte hilf mir, dieses nagende Problem zu beheben.
Vielen Dank im Voraus!
Es gibt zwei Möglichkeiten, die Standortaktualisierungsmethode aufzurufen. 1. Wenn Sie nicht an Ort und Stelle sind, müssen Sie Standort-Updates aufrufen. 2. Wenn Sie gerade erhalten, dass Sie aktualisieren möchten, dann rufen Sie diese Methode in öffentlichen void onConnected (Bundle connectionHint) -Methode. –
Danke @Kedi! Sie meinen, ich bewege die Zeile 'LocationServices.FusedLocationApi.requestLocationUpdates (gApiClient, locationRequest, pendingIntent);' von 'startLocationUpdates()' nach 'onConnected()'? Wäre das nicht immer im Autopilot-Modus? –
sollten Sie presence.startLocationUpdates() aufrufen; Diese Methode von onConnected() -Methode. und überprüfe, ob dein Standort null ist und dann wird er anrufen. Versuchen Sie es einmal –