2

FragmentActivity で SupportMapFragment を使用して、Android で Google Map API v2 を正常に動作させています。

ただし、ネットワーク接続がない場合 (およびキャッシュされた情報がない場合) は、明らかにマップを表示できません。LogCat はこれを確認するエラー メッセージ (「Google Maps Android API: マップの読み込みに失敗しました。Google サーバーに接続できませんでした」) を表示しますが、これはスローされません。

この場合、別のアクティビティに転送したいので、プログラムでこのケースを検出するにはどうすればよいですか? ドキュメントは、マップをロードできない場合、SupportMapFragment で呼び出された getMap() が null を返すと主張していますが、そうではないようです。

私は解決策を求めてほぼ2日間探し回っていましたが、何も見つけることができませんでした. 私は何かを見落としているのでしょうか、それとも何かが実際にロードされたかどうかを確認することは本当に不可能ですか? どんな助けでも大歓迎です。

編集:

これが私の現在のコードです。setContentView が実行された後 (デバッガーでチェック)、ログにエラー メッセージが表示されますが、それでも ConnectionResult == SUCESS と表示されます。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    SupportMapFragment smf = ((SupportMapFragment) 
    getSupportFragmentManager().findFragmentById(R.id.map));
    map = smf.getMap();

    if (map != null && GooglePlayServicesUtil.isGooglePlayServicesAvailable(this) == 
                                        ConnectionResult.SUCCESS) {
        // doSomething with the map
    } else {
        Toast.makeText(this, "Google Maps not working", Toast.LENGTH_SHORT).show();
        System.out.println(GooglePlayServicesUtil.isGooglePlayServicesAvailable(this));
        // forward to another activity
    }
}
4

1 に答える 1

2

GooglePlayServicesUtil.isGooglePlayServicesAvailable は、デバイスで利用可能な GooglePlayServices.APK に関連しています。API は、タイルがいつ読み込まれるかを示しません。

次のオプションがあります。

  1. 試して、タイルがキャッシュされているかどうかを確認します(ハック、簡略化):new File(getExternalCacheDir(), "cache_vts_your.package.name.0").exists()
  2. 独自のコードでインターネットの可用性を確認する
  3. logcat を解析してエラーを見つけます

編集:

セキュリティ上の理由により、アプリケーションはログの読み取りを許可されなくなったため、注意点 3 は推奨されません。

于 2013-04-06T09:10:42.010 に答える