显示用户';Android中的位置

显示用户';Android中的位置,android,location,location-provider,Android,Location,Location Provider,我在获取用户位置(我的位置)时遇到问题。我的代码是 double lat; double lng; LocationManager locationManager; String context = Context.LOCATION_SERVICE; locationManager = (LocationManager)getSystemService(context); String provider = LocationManager.GPS_PROVIDER; Location loca

我在获取用户位置(我的位置)时遇到问题。我的代码是

double lat;
double lng;
LocationManager locationManager;
String context = Context.LOCATION_SERVICE; 
locationManager = (LocationManager)getSystemService(context);
String provider = LocationManager.GPS_PROVIDER;
Location location = locationManager.getLastKnownLocation(provider);
if(!locationManager.isProviderEnabled(provider)){
 locationManager.setTestProviderEnabled(provider, true);
}
boolean enabled = locationManager.isProviderEnabled(provider);
if(enabled){
        Toast.makeText(LoginActivity.this,"provider enabled",Toast.LENGTH_LONG).show();
}
else{
    Toast.makeText(LoginActivity.this,"provider disabled",Toast.LENGTH_LONG).show();
}
if(location!=null){
  lat = location.getLatitude();
  lng = location.getLongitude();
  AlertDialog.Builder ab=new AlertDialog.Builder(LoginActivity.this);
  ab.setMessage(Html.fromHtml("<b><font color=#ff0000>Location" +"</font></b><br>"
            +location.toString()+"<br>Latitude: "+lat
                +"<br>Longitude "+lng));
  ab.setPositiveButton("ok",null );
  Toast.makeText(LoginActivity.this,"You are at     "+location.toString(),Toast.LENGTH_LONG).show();
}
else{
    Toast.makeText(LoginActivity.this,"Location not found",Toast.LENGTH_LONG).show();
} 
double-lat;
双液化天然气;
地点经理地点经理;
字符串上下文=context.LOCATION\u服务;
locationManager=(locationManager)getSystemService(上下文);
字符串提供程序=LocationManager.GPS\U提供程序;
Location Location=locationManager.getLastKnownLocation(提供者);
如果(!locationManager.isProviderEnabled(提供程序)){
locationManager.setTestProviderEnabled(提供程序,true);
}
布尔启用=locationManager.isProviderEnabled(提供程序);
如果(已启用){
Toast.makeText(LoginActivity.this,“已启用提供程序”,Toast.LENGTH_LONG.show();
}
否则{
Toast.makeText(LoginActivity.this,“provider disabled”,Toast.LENGTH_LONG.show();
}
如果(位置!=null){
lat=位置。getLatitude();
lng=location.getLongitude();
AlertDialog.Builder ab=新建AlertDialog.Builder(LoginActivity.this);
ab.setMessage(Html.fromHtml(“位置”+”
) +location.toString()+“
纬度:”+lat +“
经度”+lng); ab.setPositiveButton(“确定”,空); Toast.makeText(LoginActivity.this,“您在”+location.toString(),Toast.LENGTH_LONG.show(); } 否则{ Toast.makeText(LoginActivity.this,“未找到位置”,Toast.LENGTH_LONG.show(); }
我的问题是,在启用应用程序消息提供程序时,我获取的位置为
null
。我在这段代码中没有发现任何问题。我也在一台设备上测试了它,它显示提供程序已启用,但找不到位置

我没有在类中实现位置侦听器。
有必要在我的类中实现位置侦听器吗?

您只能从手机中获取最后一个已知位置。如果该值为空(如果最后一个已知位置不可用),则您不会尝试以任何其他方式接收位置


您应该实现LocationListener并根据本指南注册它以接收位置更新:这将导致手机尝试获取用户位置,并以位置对象的形式将其交给您的应用程序。

您仅从手机获取最后已知的位置。如果该值为空(如果最后一个已知位置不可用),则您不会尝试以任何其他方式接收位置


您应该实现LocationListener,并根据本指南注册它以接收位置更新:这将导致手机尝试获取用户位置,并以位置对象的形式将其交给您的应用程序。

感谢Pich提供的提示我在代码中添加了位置列表器,它工作正常并显示位置但我认为它不能在emulator上工作。AVD在我访问用户位置列表器时关闭,但在设备上工作正常。欢迎使用。别忘了将答案标记为已接受,否则问题将仍然无法回答。感谢Pich提供的提示我在代码中添加了位置列表器,它工作正常并显示位置,但我认为它在emulator上不起作用。AVD在我访问用户位置列表器时关闭,但在设备上工作正常。欢迎使用。别忘了把答案标为“已接受”,否则这个问题仍然没有答案。