14

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

独自のデバッグ キーを生成し、プロジェクトに追加しました。アプリの起動時にマップを表示したり、ズームインしたりできるので、マップ タイルを取得できます。はい - マニフェスト ファイルに正しいアクセス許可とライブラリ セットがあります (サンプルに従って)。

しかし、DDMS または Telnet のいずれかを介して、マップ上で場所を設定できません。LogCat に次のエラーが表示されます: MapActivity : Couldn't get connection factory client

この問題に関する多くのスレッドを読みましたが、それらは常に 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 で試してみましたが、それでも満足できません。私はまだ実際のデバイスでこれを試していません - すぐにやります.

この問題に関するヘルプは大歓迎です-それは本当に私を困惑させています;)

乾杯

4

8 に答える 8

6

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

マップ タイルを見ると、マップ上の位置を確認するのに明らかに欠けているものがあります。

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 を介してデバイス上で実際の有効な場所を取得し、エミュレーター上で偽の場所を取得するために機能しても、まだそのファクトリクライアントエラーが発生していることを忘れていました)。私は今のところ無視します。

于 2011-06-02T12:57:04.387 に答える
4

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

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

<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 ボタンを使用して実際のキーを指します。

于 2012-01-10T14:15:38.160 に答える
4

開発者の皆様、こんにちは。

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

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

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

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

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

Google Maps Android API キーの取得方法

于 2012-08-02T03:39:28.043 に答える
2

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

于 2012-03-14T02:58:00.463 に答える
2

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

setContentView(R.layout.main);

main.xml レイアウト ファイルに mapview が含まれていない

になりました

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>

マップは現在機能しています。これが役立つことを願っています

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

于 2011-11-23T12:13:44.167 に答える
0

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

于 2012-08-01T12:36:08.193 に答える
0

以下の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"
/>
于 2012-05-09T07:04:38.797 に答える
0

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

于 2013-03-15T10:19:02.030 に答える