Android 位置不为';我不能用安卓手机工作

Android 位置不为';我不能用安卓手机工作,android,geolocation,Android,Geolocation,我正在为Android开发一个应用程序,它生成一条短信,获取用户的当前位置。我已经这样做了,但应用程序无法检测到位置,而且似乎是我创建的Toast“Fallo2” 我正在一部真正的手机上测试这个应用程序 有什么问题 主类 @Override public void onClick(View view) { switch (view.getId()) { case R.id.enviarMensajeButton: if(obtenerTelefonos()

我正在为Android开发一个应用程序,它生成一条短信,获取用户的当前位置。我已经这样做了,但应用程序无法检测到位置,而且似乎是我创建的Toast“Fallo2”

我正在一部真正的手机上测试这个应用程序

有什么问题

主类

@Override
    public void onClick(View view) {
    switch (view.getId()) {
    case R.id.enviarMensajeButton:
        if(obtenerTelefonos()){
            if(obtenerLocalizacion()){
                generarMensaje();
            }
            else{
                Toast.makeText(this, "Fallo2", Toast.LENGTH_LONG).show();
            }
        }
        else{
            Toast.makeText(this, "Fallo", Toast.LENGTH_LONG).show();
        }

        break;
    case R.id.menuButton:
        Intent configuracionIntent = new Intent(MainActivity.this, Configuracion.class);
        startActivity(configuracionIntent);
        break;
    }
}

private boolean obtenerTelefonos(){
    return true;
}

private boolean obtenerLocalizacion() {
    GPS gps = new GPS(this);
    int i = 0;
    while(!gps.obtenerLocation()){
        i++;
        if(i > 100){
            return false;
        }
    }
    if(gps.obtenerDireccion()){
        codigoPostal = gps.codigoPostal;
        direccion = gps.direccion;
        ciudad = gps.ciudad;
        pais = gps.pais;
        latitude = String.valueOf(gps.latitude);
        longitude = String.valueOf(gps.longitude);
        return true;
    }
    else{
        return false;
    }
}

private void generarMensaje(){
    tv.setText(codigoPostal+"  "+direccion+"  "+ciudad+"  "+pais+"  "+latitude+"  "+longitude);
}
等级GPS

public class GPS implements LocationListener {
private Context context;
public double latitude, longitude;
public String codigoPostal, direccion, ciudad, pais;
private LocationManager locationManager;
public Location bestLocation;
private List<String> providers;
public List<Address> direcciones;

public GPS(Context context) {
    this.context = context;
    locationManager = (LocationManager) context
            .getSystemService(Context.LOCATION_SERVICE);
}

public boolean obtenerLocation() {
    try {
        providers = locationManager.getAllProviders();
        bestLocation = null;
        for (String provider : providers) {
            Location location = locationManager.getLastKnownLocation(provider);
            if(location == null) continue;
            if(bestLocation == null || location.getAccuracy() < bestLocation.getAccuracy()){
                bestLocation = location;
            }
        }
        if(bestLocation != null){
            return true;
        }
        else{
            return false;
        }
    } catch (Exception e) {
        return false;
    }
}

public boolean obtenerDireccion() {
    try {
        // Obtenemos la longitud y la latitud del objeto location

        latitude = bestLocation.getLatitude();
        longitude = bestLocation.getLongitude();

        // Creamos un objeto Geocoder indicando nuestro lenguaje
        //Locale spanish = new Locale("es", "ES");
        Geocoder geocoder = new Geocoder(this.context, Locale.ENGLISH);

        // A partir de Geocoder obtenemos una lista de direcciones
        direcciones = geocoder.getFromLocation(latitude,
                longitude, 1);

        // Obtenemos todos los datos que necesitamos
        codigoPostal = direcciones.get(0).getPostalCode();
        direccion = direcciones.get(0).getAddressLine(0);
        ciudad = direcciones.get(0).getAddressLine(1);
        pais = direcciones.get(0).getAddressLine(2);

        return true;
    } catch (Exception e) {
        return false;
    }
}

@Override
public void onLocationChanged(Location arg0) {

}

@Override
public void onProviderDisabled(String arg0) {

}

@Override
public void onProviderEnabled(String arg0) {

}

@Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {

}}
公共类GPS实现LocationListener{
私人语境;
公共双纬度、经度;
公共字符串编码:邮政、目录、城市、pais;
私人场所经理场所经理;
公共场所;
私人名单提供者;
公共目录目录;
公共GPS(上下文){
this.context=上下文;
locationManager=(locationManager)上下文
.getSystemService(Context.LOCATION\u服务);
}
公共布尔obtenerLocation(){
试一试{
providers=locationManager.getAllProviders();
bestLocation=null;
for(字符串提供程序:提供程序){
Location Location=locationManager.getLastKnownLocation(提供者);
如果(位置==null)继续;
if(bestLocation==null | | location.getAccuracy()

我已在清单文件中添加了权限,只需获取一个位置。

您在清单文件中添加了正确的权限吗? 您需要发布更多代码以获得帮助 一般来说你的

@Override
public void onLocationChanged(Location arg0) {

}

方法为空-这意味着在接收到gps信号后,您对信息不做任何操作-您应该使用您获得的新位置来更新用户的位置,尝试使用guid获得更多指导您还可以从线程获得有关gps类的更多指导

是的,我已添加了权限。最后我编辑了我的文章。我只需要获得一个位置。我怎么做?。您的意思是应用程序已等待方法onLocationChanged吗?onLocationChanged事件在位置更改时触发,您将获得位置(称为arg0)您可以从此对象提取lat和lng,并根据此对象更新您的新位置。阅读我添加的指南可能需要很长时间,但我向您保证,一旦完成,您将获得所需的所有答案。我阅读的指南较少,但它不包含我问题的解决方案。我的意思是,我不知道如何“睡眠”的应用程序,而全球定位系统获得一个良好的位置。我不明白你想实现什么兄弟。。。如果您想更新位置,请使用onLocationchanged,它基本上解决了您的问题。。。