Я получаю latitude
и longitude
, используя GPS
в моем application
. Я использую GoogleApiClient
для этого. У меня есть Activity
с именем "HomeActivity", для которого я создал заголовок и FrameLayout
, чтобы показать другие fragments
в этом Activity
. У меня также есть кнопка настройки в моем заголовке.
Теперь проблема:
В одном из моих фрагментов под названием «Фрагмент» я извлекаю latitude
и longitude
и использую их для какой-то работы. И при настройке button
я открываю dialog
, который сразу же получает текущую широту и долготу. Но проблема в том, что когда я нахожусь на «Фрагменте», а также открываю Dialog
, то иногда мое приложение падает и выдает ошибку, т.е. «Уже управляю GoogleApiClient
с идентификатором 0». И ошибка прямо указывает на мой код Dialog
. Я провел несколько часов работы и исследований, но не смог решить проблему. Пожалуйста помоги.
Код для открытия диалогового окна с помощью кнопки «Настройка» в заголовке HomeActivity
// onClickListener on Setting button
case R.id.setting:
DialogSettings dc = new DialogSettings(HomeActivity.this, HomeActivity.this,"HomeActivity",HomeActivity.this);
dc.show();
Код для диалога, где мы получаем широту и долготу
public class DialogSettings extends Dialog implements View.OnClickListener, GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener,
LocationListener {
Context context;
private GoogleApiClient googleApiClient;
AppCompatActivity appCompatActivity;
public DialogSettings(Activity a, Context context, String currentActivity, AppCompatActivity appCompatActivity) {
super(a);
this.context = context;
this.currentActivity = currentActivity;
this.appCompatActivity = appCompatActivity;
}
// point out error on this code
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
setUpGClient();
}
@Override
public void onDetachedFromWindow() {
super.onDetachedFromWindow();
googleApiClient.stopAutoManage((AppCompatActivity) context);
googleApiClient.disconnect();
}
// point out error on this code
private synchronized void setUpGClient() {
googleApiClient = new GoogleApiClient.Builder(context)
.enableAutoManage(((AppCompatActivity) context), 0, this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
googleApiClient.connect();
}
}
Код для «Фрагмента», который также извлекает широту и долготу
public class UwLocalePolitieFragment extends Fragment implements GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener,
LocationListener {
@Override
public void onPause() {
super.onPause();
googleApiClient.stopAutoManage(getActivity());
googleApiClient.disconnect();
}
private synchronized void setUpGClient() {
googleApiClient = new GoogleApiClient.Builder(getActivity())
.enableAutoManage(getActivity(), 0, this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
googleApiClient.connect();
}
@Override
public void onStart() {
super.onStart();
setUpGClient();
}
}