Я выполняю операцию, которая пытается распечатать текущее местоположение заданных пользователем координат с помощью геокодера, однако происходит сбой при вызове 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
}
}