не подключен В этом классе ,:GoogleApiClient вопрос: GoogleApiClient пока
public class Presence implements ConnectionCallbacks,
OnConnectionFailedListener, LocationListener
Я следующий конструктор:
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()
я использую его, чтобы вернуть Singleton
экземпляр:
public static synchronized Presence getInstance(Context context)
{
if (presenceSingleton == null)
presenceSingleton = new Presence(context);
return presenceSingleton;
}
onConnected()
выглядит следующим образом:
@Override
public void onConnected(Bundle connectionHint)
{
Log.e(LOG_TAG, "In onConnected(), gApiClient.isConnected(): " +
gApiClient.isConnected());
createLocationRequest();
getLocation();
getSubLocality();
} // of onConnected()
Заданная пользователь может сделать в приложении, я называю следующий метод поместить приложение в так называемой автоматической пилотном режиме, в котором он начинает отслеживать местоположение пользователя:
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()
в основной деятельности, я сделать экземпляр указанного класса в 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
Когда пользователь устанавливает автопилот предпочтение, приложение аварии со следующим исключением:
java.lang.IllegalStateException: GoogleApiClient is not connected yet.
по указанной выше схеме startLocationUpdates()
.
Я прочитал много ответов, но не смог найти решение этой проблемы. Не могли бы вы указать, что я делаю неправильно? Разве что класс Presence
должен быть в AppCompatActivity
или FragmentActivity
или аналогичный, и не может быть независимым, как здесь? Пожалуйста, помогите мне исправить эту ворчащую проблему.
Большое спасибо заранее!
Существует два способа вызова метода обновления местоположения. 1. Если вы не получаете locatoin, тогда вам нужно вызвать обновления местоположения. 2. Если вы получаете даже вы хотите обновить, тогда вызовите этот метод в общедоступном void onConnected (Bundle connectionHint). –
Спасибо @ Kedi! Вы имеете в виду, что я перемещаю строку 'LocationServices.FusedLocationApi.requestLocationUpdates (gApiClient, locationRequest, pendingIntent);' from' startLocationUpdates() 'to' onConnected() '? Не может ли это сделать приложение в режиме автопилота? –
вы должны вызвать presence.startLocationUpdates(); этот метод из метода onConnected(). и проверьте, является ли ваше местоположение нулевым, а затем оно вызовет. Попробуйте один раз –