2016年12月27日火曜日

場所を選択するUIで地図を表示する必要があり、DialogFragmentでMapFragmentを設定した際に、1回目の表示の時は問題ないけど、2回目に表示しようするとDuplicate idのエラーが発生した


 Duplicate id 0x7f0e00d9, tag null, or parent id 0xffffffff with another fragment for com.google.android.gms.maps.SupportMapFragment


1回目の時にDialogをdismissしてもMapFragmentはクリアされてないらしい
そのため2回目でDuplicateとなってしまっている


結論として、DialogFragmentのdismissをオーバーライドしてmapのFragmentをremoveすることで対応した



<fragment android:id="@+id/map" class="com.google.android.gms.maps.SupportMapFragment" android:layout_width="match_parent" android:layout_height="250dp" />


@Overridepublic void onDismiss(DialogInterface dialog) {
  super.onDismiss(dialog);
  if (getActivity() != null) {
    FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
    Fragment fragment = fragmentManager.findFragmentById(R.id.map);
    if (fragment != null) {
      getActivity().getSupportFragmentManager().beginTransaction().remove(fragment).commit();
    }
  }
}


同様の問題がDialogFragmentでなくFragmentで起こる場合には、onDestoroyView()の中で同じようにMapFragmentを削除してやれば問題なく動作すると思う

2016年5月6日金曜日

GoogleApiClientでerrorCode=2が出る

お客様の端末を借りてテストをしてみたらGoogleApiClientを使うと位置情報の取得を開始しておらず「あれ?」と思ったらonConnextionFaildに処理が来ててerrorCodeが2になっていました

調べてみると「SERVICE_VERSION_UPDATE_REQUIRED」とのこと

参考: Google APIs for Android#ConnectionResult


どうやら端末のGooglePlayServicesが古いようですね
GooglePlay開発者サービスをバージョンアップすることで問題解決


こういうのって、利用者にエラー表示すると伝わるんだろ???

「GooglePlay開発者サービスが古いのでバージョンアップしてください」とダイアログでも出せばいいのかな?


「GooglePlay開発者サービスってなに?」ってなりそうだな・・・