web-dev-qa-db-ja.com

Android MapActivity:接続ファクトリクライアントを取得できませんでした

Google APIサンプルプロジェクトで提供されているように、マップのデモを機能させようとしています。私はAVDを使用していて、バージョン8、10、11で試しましたが、同じ問題が発生します。

自分のデバッグキーを生成してプロジェクトに追加しました。アプリの起動時に地図を表示したり、ズームインしたりできます。地図のタイルを取得しています。はい-マニフェストファイルに適切な権限とライブラリが設定されています(サンプルごと)。

しかし、DDMSでもTelnetでも、地図上に場所を設定できません。 LogCatに次のエラーが表示されます:MapActivity:接続ファクトリクライアントを取得できませんでした

私はこの問題に関して多くのスレッドを読みましたが、それらは常に不良なAPIキーの結果であるようです。マップタイルを取得しているので、これはありません。

そこで、これをさらにテストするために独自のプロジェクトを作成し、マップの初期化時に次のコードを実行しています。

    myLocationOverlay = new MyLocationOverlay(this, mapView);
       mapView.getOverlays().add(myLocationOverlay);
       myLocationOverlay.enableCompass();
       myLocationOverlay.enableMyLocation();
       Log.i("funkatron: ", "ABOUT TO CALL RUN ON FIRST FIX");
       myLocationOverlay.runOnFirstFix(new Runnable() {
           public void run() {
               String loc = "we have a location, executing AnimateTo().
"+myLocationOverlay.getMyLocation().toString();
               Log.i("funkatron:",loc);

mapController.animateTo(myLocationOverlay.getMyLocation());
           }
       });

最初のログステートメントは表示されますが、2番目のログステートメントは表示されず、その時点で「MapActivity:接続ファクトリクライアントを取得できませんでした」がLogCatに書き込まれます。

SDK v8エミュレータに問題があったことを読んだので、v10と11を試してみましたが、それでも喜びはありません。私はまだ実際のデバイスでこれを試していません-すぐにやります。

この問題に関するどんな助けでも大歓迎です-それは本当に私を困惑させます;)

乾杯

14
electricSunny

私はあなたが説明したのとまったく同じ初期状況でした。

マップタイルを見ると、マップ上の位置を確認するためにいくつか欠けているのは明らかです。

1。場所が必要です。 DDMSビューを介してエミュレータに地理位置のみを設定するだけでは十分ではないことを認識しました。 DDMSの[送信]ボタンを毎回明示的に押して、エミュレータで位置更新をトリガーする必要があります。 (ちょうど言及する:実際のデバイスでは、デバイスが現在地の更新を取得するために少し歩く必要がある場合があります;)、私が今何をすべきかを考えるまで歩き回るまでとてもうんざりしていました^^)

2。正しいOverlayItemを使用したItemizedOverlayの正しい実装が必要です。私は少し複雑になった自分のオーバーレイを書きました。実装が正しいかどうかわからない場合は、このガイドを使用して、最小限の変更で実装を作成してください マップビューチュートリアルAndroid開発者

またはこれを使用してください:

private class MyItemizedOverlay extends ItemizedOverlay {
    private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();

    public MyItemizedOverlay(Drawable defaultMarker) {
          super(boundCenterBottom(defaultMarker));
    }

    public void addOverlay(OverlayItem overlay) {
        mOverlays.add(overlay);
        populate();
    }

    @Override
    protected OverlayItem createItem(int i) {
      return mOverlays.get(i);
    }

    @Override
    public int size() {
      return mOverlays.size();
    }
}

private void updateLocationOverlay() {
    if (location == null) { return };
    List<Overlay> mapOverlays = mapView.getOverlays();
    Drawable drawable = this.getResources().getDrawable(R.drawable.XXXX);
    MyItemizedOverlay myItemizedOverlay = new MyItemizedOverlay(drawable);
    GeoPoint point = new GeoPoint((int)(location.getLatitude() * 1E6), (int)(location.getLongitude() * 1E6));

    OverlayItem overlayitem = new OverlayItem(point, "Hola, Mundo!", "I'm in Mexico City!");
    myItemizedOverlay.addOverlay(overlayitem);
    mapOverlays.add(myItemizedOverlay);
}

ドローアブルでboundCenterまたはboundCenterBottomを呼び出す必要があることを特に指摘しておきます。それ以外の場合は描画されません。 overlayItem.setMarkerを使用して同じオーバーレイで異なるマーカーを使用する場合も注意してください。

3。マップ上のビューをあなたのポイントに移動する必要があります。これは次のようにして実現できます。

MapController mapController = mapView.getController();
mapController.setCenter(point)

関数mapController.zoomToSpanが機能しないことを認識しました。 (少なくとも私にとっては、私はまだこのアプリで開発しています)。 animateToと同じかもしれません。私は試しませんでした。セットセンター作品。 (およびsetZoomレベルも)。

おそらく私が言及したポイントにつながる可能性のある何かがあり、あなたのマップがあなたの望むように機能しないかもしれません。

幸運を!

編集:それが有効な場所を取得するために機能し、デバイス上で実際に、そしてddms sendを介してエミュレーターで偽造しても、ファクトリークライアントエラーが発生していることを忘れていました。今は無視します。

6
Diego Frehner

アプリケーションAndroidManifest.xmlで権限を使用していることを確認してください。

androidManifest.xmlにこれらの3行を追加します

<uses-permission Android:name="Android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission Android:name="Android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission Android:name="Android.permission.INTERNET"/>

また、キーストアが作成したキーストアを指していることも確認してください。

Eclipse Check Window-> Preferences-> Android-> Build:Default Debug keystoreで、keytoolを使用して作成したキーをポイントしています。それ以外の場合は、[Browse]ボタンを使用して実際のキーをポイントします。

4
Prem

みなさん、こんにちは。

私もこの問題を経験し、何が起こっているのかを理解するために半日近く費やしました。最初はマップアクティビティがまったく表示されず、「接続ファクトリクライアントを取得できませんでした」というエラーが表示され、その結果、別のエラー「Java.io.IOException:サーバーが3を返しました」が発生しました。

これは、Googleが開発中、つまりアプリケーションに署名してリリースする前に、テスト中に使用されるデバッグキーでアプリケーションに署名する必要があるため、開発ベースと効果的に通信できなかったことが原因です。そのためには、以下の方法に従って、[パスワード]と[キーパスワード]を独自のパスワードに置き換えます。

.Androidディレクトリから、次のコマンドを発行します。

keytool -list -alias androiddebugkey -keystore debug.keystore storepass [password] -keypass [key password]

上記を実行すると、Google Maps APIキーにサインアップするために使用できるMD5証明書のフィンガープリントを受け取ることができます。プロジェクトのGoogle Maps APIキーを置き換え、プロジェクトのクリーンアップを実行して、アプリケーションを再実行します。これで、Googleマップを表示して、迷惑なエラーを取り除くことができるはずです。

Googleマップの取得方法Android APIキー

4
Mat

私は同じ問題に直面し、問題は、適切なレイアウトをMapActivityに設定したときにコードが見落としたことでした

setContentView(R.layout.main);

main.xmlレイアウトファイルにマップビューが含まれていない

それはなりました

setContentView(R.layout.mapview) 

次のXMLコードがある

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/main"
    Android:layout_width="fill_parent" 
    Android:layout_height="fill_parent">
    <com.google.Android.maps.MapView
        Android:layout_width="fill_parent" 
        Android:layout_height="fill_parent"
        Android:enabled="true"
        Android:clickable="true"
        Android:apiKey="YOU_API_KEY"
        />
</LinearLayout>

地図は現在動作しています。これが役立つことを願っています

また、そのようなビューを追加するとこのエラーが発生するため、マップビューレイアウトに何かを追加したかどうかを確認することもできます

2

「MapActivityがコネクションファクトリクライアントを取得できませんでした」で同じ問題が発生しました。問題を修正する方法は非常に簡単でした。アプリケーション全体をアンインストールして再インストールしました。出来た!!!

2
user1161829

これには複数の理由があるようです。私はそれを修正して、プロジェクトのビルドターゲットをapi 10に変更し(プロジェクト/ Properties/Androidをクリック)、次にapiレベル15のエミュレーターで実行します(非常に遅いですが!)。

0
Broo

誰かがすでにコメントでそれを言った:電話を再起動してください。または、エミュレータで実行している場合:エミュレータを再起動します。

0
Seppo Jokinen

以下で同じ問題が発生しましたmain.xml

<?xml version="1.0" encoding="utf-8"?>    
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:orientation="vertical" >

    <com.google.Android.maps.MapView
        xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:id="@+id/mapview"
        Android:layout_width="fill_parent"
        Android:layout_height="fill_parent"
        Android:clickable="true"
        Android:apiKey="Your API-KEY"
    />

</LinearLayout>

次にmain.xmlを以下のように変更し、問題は解決しました

<?xml version="1.0" encoding="utf-8"?>
<com.google.Android.maps.MapView
        xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:id="@+id/mapview"
        Android:layout_width="fill_parent"
        Android:layout_height="fill_parent"
        Android:clickable="true"
        Android:apiKey="Your API-KEY"
/>
0
Leo