我试图获得milocation方法myLocationOverlay.getMyLocation();但它总是返回null,我试过GPS启用,禁用,网络启用,都启用,但总是返回null。有人能帮我吗?
我把我所有的课,如果这能帮助任何人在我的情况
editarLugar extends MapActivity implements LocationListener{
latitud两倍双longitudGeoPoint哟DataBaseHelper ayudabbddMapView eMapaMapController controladorMapaTextView eNombreTextView eDescImageView eFoto文件archivoImagenUri imageUri
private MyLocationOverlay;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.editarlugar);
eNombre = (TextView) findViewById(R.id.eNombre);
eDesc = (TextView) findViewById(R.id.eDesc);
eFoto = (ImageView) findViewById(R.id.eFoto);
eMapa = (MapView) findViewById(R.id.editarMapa);
/********************
* Obtengo los datos del item, con intent procedente
* de otro activity y tambien digo que tipo de accion es: Crear o Editar
*********************/
final Bundle extras = getIntent().getExtras();
String nombreClick = null;
if(extras!=null){
nombreClick = extras.getString("nombre");
estoyEditando(nombreClick,eNombre,eDesc,eFoto);
}else{
//Estoy creando
}
/**********************************************************************************
* Instanciamos el mapa de google
* Le ponemos controles de zoom
**********************************************************************************/
eMapa.setBuiltInZoomControls(true);
eMapa.displayZoomControls(true);
eMapa.setClickable(true);
controladorMapa = eMapa.getController();
situame();
eFoto.setOnClickListener(imagenClick);
}
/*****************************************************************************************************************************************
*
* FUERA DE ONCREATE
*
*
*******************************************************************************************************************************************/
/****************
*
* METODO PUENTE PARA GEOPOSICIONARME
*
****************/
private void situame() {
if(myLocationOverlay == null){
myLocationOverlay = new MyLocationOverlay(this, eMapa);
myLocationOverlay.runOnFirstFix(new Runnable() {
public void run() {
myLocationOverlay.enableMyLocation();
controladorMapa().animateTo(myLocationOverlay.getMyLocation());
yo=myLocationOverlay.getMyLocation();
}
});
mapOverlays().add(myLocationOverlay);
}
}
private MapController controladorMapa(){
return eMapa.getController();
}
private void animateTo(GeoPoint point) {
controladorMapa().animateTo(point);
}
// Lista de capas que maneja el mapa
protected List<Overlay> mapOverlays() {
return eMapa.getOverlays();
}
/************************************
* Metodo para rellenar los campos de los views a partir de una busqueda
* en la BBDD de un dato ya existente
*
* @param nombreClick Nombre del string para generar la busqueda
* @param eNombre Nombre del textview del campo buscar
* @param eDesc Nombre del textview del campo descripcion
* @param eFoto Nombre dle imageView del campo foto
*/
private void estoyEditando(String nombreClick, TextView eNombre, TextView eDesc, ImageView eFoto) {
estado = 2;//Estoy editando
ayudabbdd.getLugarPorNombre(nombreClick);
ArrayList<Object> datosLugar = ayudabbdd.getLugarPorNombre(nombreClick);
//Paso los datos de array a las variables
String nombre = nombreClick;
String descripcion = (String) datosLugar.get(3).toString();
String foto = (String)datosLugar.get(4).toString();
//Los seteo
eNombre.setText(nombre);
eDesc.setText(descripcion);
//Creo un objeto de tipo file, si existe genero la imageneo
archivoImagen = new File(foto);
ayudabbdd.close();
}
/************************
* Metodo obligatorio
*
**********************/
@Override
protected boolean isRouteDisplayed() {
return false;
}
/**************************
*
* Gestion boton menu
*
*************************/
public boolean onCreateOptionsMenu(Menu menu) {
if(estado==1){
menu.add(Menu.NONE, 1, Menu.NONE, "Crear").setIcon(R.drawable.ic_menu_tick);
menu.add(Menu.NONE, 2, Menu.NONE, "Cancelar").setIcon(R.drawable.ic_menu_stop);
return true;
}else{
menu.add(Menu.NONE, 3, Menu.NONE, "Guardar").setIcon(R.drawable.ic_menu_tick);
menu.add(Menu.NONE, 4, Menu.NONE, "Eliminar").setIcon(R.drawable.ic_menu_stop);
return true;
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case 1:
Crear(eNombre.getText().toString(),eDesc.getText().toString(),latitud,longitud,imageUri.toString());
default:
return super.onOptionsItemSelected(item);
}
}
/****************************
* Funciones de la BBDD
* Crear
* Vuelve Atras
* Guardar
* Eliminar
*********************/
public void Crear(String nuevoNombre,String nuevoDesc, double nuevoLat, double nuevoLong, String nuevoFoto){
ayudabbdd = new DataBaseHelper(this);
try{
ayudabbdd.addLugar(nuevoNombre, nuevoDesc, nuevoLat, nuevoLong, nuevoFoto);
}catch(Exception e)
{
Log.e("Error!", e.getMessage());
}
ayudabbdd.close();
}
private OnClickListener imagenClick = new OnClickListener()
{
public void onClick(View v) {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Selecciona una imagen"),1);
}
};
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
if (requestCode == 1) {
imageUri = data.getData();
eFoto.setImageURI(imageUri);
}
}
}
public String obtenerPath(Uri contentUri) {
String [] proj={MediaStore.Images.Media.DATA};
Cursor cursor = managedQuery( contentUri,proj,null,null,null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
public void onProviderDisabled(String arg0) {
// TODO Auto-generated method stub
}
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
@Override
public void onLocationChanged(Location location) {
if (location != null) {
int lat = (int) (location.getLatitude() * 1E6);
int lon = (int) (location.getLongitude() * 1E6);
GeoPoint yo = new GeoPoint(lat, lon);
animateTo(yo);
}
}
}
From google code:
getMyLocation
public GeoPoint getMyLocation()
Returns a GeoPoint corresponding to the most-recently-set user location. Returns: The GeoPoint, or null if none has been set.
它可能还没有被设置,所以你必须等待它被设置…
希望对大家有所帮助。
myLocationOverlay.runOnFirstFix(new Runnable() {
public void run() {
//Todo
}
});