概要
Google Maps Android APIを使用してGoogle Mapsを表示する場合に、特定の端末で以下のような黒い領域が出現(スクリーンショットでは映らない)し、Google Mapsを上手く表示できない場合に対処したのでメモ。
対処方針
問題が発生する端末
手元の検証端末のうち以下の2端末で現象が再現した。
端末 | OSバージョン |
---|---|
Disney Mobile on docomo N-03E | 4.0.4 |
GALAXY S II SC-02C | 4.0.3 |
さらに複数の端末での検証は、時間的な問題で不可能だったのでこの2例で判断。比較的古い端末で発生している点、特定のOSのバージョンで発生していない点から判断し対策を取ることにした。
地図の表示方法の変更
Google Maps Android APIのドキュメントを確認すると、ライトモードという表示方法が用意されていた。
Google Mapsをライトモードで利用するとビットマップ画像で表示できる。通常モードとライトモードでの機能の差はドキュメントで確認できる。
対処方法
特定のOSバージョンを閾値としてそれ未満のバージョンの場合にライトモードを使用してGoogle Mapsを表示する。今回は閾値にするバージョンをKitKatに指定した。
実装
GoogleMapOptionsにライトモードを使用するかを指定するメソッドがあるのでOSバージョンによって切り替える。
// OSバージョンによってライトモードを使用するか設定
GoogleMapOptions options = new GoogleMapOptions();
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
options.liteMode(true);
} else {
options.liteMode(false);
}
// SupportMapFragmentのインスタンスを取得する際にGoogleMapOptionsを引数として渡す
SupportMapFragment mapFragment = SupportMapFragment.newInstance(options);
mapFragment.getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(GoogleMap googleMap) {
// 各種設定
}
});
// MapFragmentを表示
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.map, mapFragment);
ft.commit();
結果
Disney Mobile on docomo N-03E、GALAXY S II SC-02Cの2端末で現象が再現しないことを確認した。また、その他の端末でも問題は発生していない。