Требуется ли API-ключ карты для работы геокодера на эмуляторе Android? - PullRequest
2 голосов
/ 05 марта 2011

Я выполняю операцию, которая пытается распечатать текущее местоположение заданных пользователем координат с помощью геокодера, однако происходит сбой при вызове getFromLocation. Я нигде не положил ключ карты. Я хотел бы знать, является ли это основной причиной сбоя программы. Я пробовал разные версии эмуляторов, но везде он вылетает с одной и той же функцией. Если ключ требуется, где я должен поставить его и как? Существуют ли какие-либо другие разрешения, кроме INTERNET и ACCESS_FINE_LOCATION, необходимые для его работы. Вот код:

package com.mapsgps.test;

import java.io.IOException;
import java.util.List;
import java.util.Locale;

//import com.mapsgps.test.googleGod;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.location.Address;
import android.location.Criteria;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;


public class startAct extends Activity implements OnClickListener, LocationListener{

    Button stopButton;
    Geocoder geocoder;
    Double latitude = 0.0;
    Double longitude = 0.0;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);


        stopButton = (Button) findViewById(R.id.stop);
        stopButton.setOnClickListener(this);
        Criteria criteria = new Criteria();
        criteria.setAccuracy(Criteria.ACCURACY_FINE);
        LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        LocationListener ll = new startAct();
        Log.d("Hello", "I have been started");
        /*String provider = lm.getBestProvider(criteria, true);
        Location location = lm.getLastKnownLocation(provider);
        Log.d("Hello", "I have been given something");
        latitude = location.getLatitude();
        longitude = location.getLongitude();
        String lat = latitude + "";
        String lgt = longitude + "";
        Log.d("LOCATION CHANGED", lat);
        Log.d("LOCATION CHANGED", lgt);
    */
        lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, ll);
        geocoder = new Geocoder(this, Locale.ENGLISH);
        Log.d("Hello", "I have been created location");

    }

    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        Log.d("Clicked", "here clicked");

    }
    public void onLocationChanged(Location location) {
        Log.d("Listening", "Changed");
        if (location != null) {
            latitude = location.getLatitude();
            longitude = location.getLongitude();
            String lat = latitude + "";
            String lgt = longitude + "";
            Log.d("LOCATION CHANGED", lat);
            Log.d("LOCATION CHANGED", lgt);
        }
        else{
            Log.d("Null", "Location is null");
        }

            String place = "City";

            int maxResult = 5;
            String addressList[] = new String[maxResult];
            Log.d("Before Context", "testing");
            maxResult = maxResult + 2;
            Log.d("Before Context", "testing2");


            try {
                Log.d("Trying", "testing");
                   List<Address> addresses = geocoder.getFromLocation(latitude, longitude, maxResult);
                   Log.d("Trying", "got location");
                   if(addresses != null) {
                       Log.d("Trying", "I am not null");
                    for (int j = 0; j < maxResult; j++){
                     Address returnedAddress = addresses.get(j);
                     StringBuilder strReturnedAddress = new StringBuilder();
                     for(int i = 0; i < returnedAddress.getMaxAddressLineIndex(); i++) {
                         strReturnedAddress.append(returnedAddress.getAddressLine(i)).append("\n");
                     }
                     Log.d("Finshed", "Hard work done");
                     addressList[j] = strReturnedAddress.toString();
                     Log.v("Addr", addressList[j]);
                    }

                   }
                   else{

                   }
            }    catch (IOException e) {
                   // TODO Auto-generated catch block
                      Log.d("IO exception", "I cupped");
                  }
        }

    @Override
    public void onProviderDisabled(String provider) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onProviderEnabled(String provider) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub

    }
}

Ответы [ 5 ]

1 голос
/ 06 марта 2011

Насколько я знаю, вам не нужен ключ API Карт для Geocoder.По крайней мере, я только что попытался изменить свой ключ на поддельный, и мой геокодер все еще работает (хотя мой MapView ничего не отображает).

Он нужен только тогда, когда вы используете MapViews и предоставляете его в XMLгде вы определяете свой MapView (в противном случае mapTiles не будут загружаться).

Обратите внимание, что вам необходимо разрешение "android.permission.INTERNET".

0 голосов
/ 14 июня 2011

Я немного новичок в разработке для Android, но из того, что я прочитал, вам не нужен ключ API для определения местоположения телефона, но он вам нужен, если вы, конечно, используете API для [обратного] геокодирования .

Кажется, вы уже разрешили Интернет для эмулятора, так что это не проблема. Обратите внимание, что на симуляторе Google Maps вылетает после версии> 2.2 и до <3.0. </p>

Если вы хотите узнать, как указать ключ API, он выглядит примерно так:

<com.google.android.maps.MapView 
android:apiKey="yourapikeyhere" 
/>
0 голосов
/ 29 апреля 2011

Вам не нужен ключ API для печати с использованием Geocoder, но вам понадобится ключ API, если вы пытаетесь использовать Google Maps в своем приложении.

0 голосов
/ 05 марта 2011

ваше отображение карты отображается ..?если у вас hv api key для mapview, то для геокодера не нужен еще один api ключ ...

0 голосов
/ 05 марта 2011

Да, для эмулятора требуется ключ API.

...