一旦 LocationManger 得到它就显示纬度和经度
Posted
技术标签:
【中文标题】一旦 LocationManger 得到它就显示纬度和经度【英文标题】:Show Latitude and Longitude as soon as LocationManger gets it 【发布时间】:2013-10-22 06:38:03 【问题描述】:我正在开发一个紧急短信,每当您访问活动时,GPS 都会启用,并且用户的位置将显示在文本视图中,然后每当用户按下发送时,它将被发送到目标设备。现在,如果我使用 Network_Provider,Textview 将在我访问我的活动时尽快获得纬度和经度,并且消息将显示在 textview 中。但是,GPS 将显示一个空的文本视图和空的位置。
这是我的代码:
public class SMSmyLocation extends Activity implements OnClickListener, LocationListener
LocationManager locationManager;
LocationListener locationListner;
Context ctx = SMSmyLocation.this;
TextView tv1, tv2;
Button b1;
EditText ed;
Geocoder geo;
List<Address> addresses;
String address = "";
boolean visibility = false;
double Long = 0,Lad = 0;
SharedPreferences sp;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_smsmy_location);
tv1 = (TextView) findViewById(R.id.ESMS);
tv2 = (TextView) findViewById(R.id.currentLocation);
b1 = (Button) findViewById(R.id.SendSMS);
turnGPSOn();
geo = new Geocoder(this, Locale.getDefault());
locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
if (addresses != null)
address = addresses.get(0).getAddressLine(0) + " " + addresses.get(0).getAddressLine(1) + " " + addresses.get(0).getAddressLine(2);
tv1.setText(address);
else
tv1.setText("fail");
b1.setOnClickListener(this);
public void onLocationChanged(Location location)
// TODO Auto-generated method stub
Log.e("LM", "Not null");
double Lad = location.getLatitude();
double Long = location.getLongitude();
try
addresses = geo.getFromLocation(Lad, Long, 1);
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();
Log.e("Long", String.valueOf(Long));
@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
我该怎么做才能让系统等到 LocationManger 获得位置坐标,一旦可用,以文本形式显示它们。线程是个好主意吗?如何实现?请提供教程或代码以及您的答案。感谢您的时间和考虑。
【问题讨论】:
由于 GPS 需要时间来检索坐标,因此需要一些时间.. Network_provider 在快速定位访问和电池消耗方面非常有效 有时当我关闭无线网络时,network_provider 不会给我位置,所以我还需要考虑 GPS 所以只有在network_provider关闭的情况下才使用GPS,但这需要时间。 是的,问题是当我使用 GPS 时,获取 Lad 和 Long 需要时间,到那时 textview 已经设置为“失败”,因为 GPS 没有快速获取坐标.所以我需要一种方法让系统等到 GPS 获取坐标然后将其添加到文本中 将 lat 和 long 值初始化为 0.0,一旦你收到坐标(意味着如果 lat 和 long 值发生变化),就在 textView 中打印出来 【参考方案1】:这样的事情应该可以工作:
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_smsmy_location);
tv1 = (TextView) findViewById(R.id.ESMS);
tv2 = (TextView) findViewById(R.id.currentLocation);
locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
public void onLocationChanged(Location location)
// TODO Auto-generated method stub
double Lad = location.getLatitude();
double Long = location.getLongitude();
tv2.setText(Lad+", "+Long);
主要是在onLocationChanged
函数中设置要更新的textView。所以当 GPS 位置进来时(是的,它可能需要很长时间),它会触发这个函数并更新你的 textView
【讨论】:
如果我在一个地方呆了很长时间,当GPS获取坐标时,onLoctionChanged函数仍然会触发吗?!感谢您的回复以上是关于一旦 LocationManger 得到它就显示纬度和经度的主要内容,如果未能解决你的问题,请参考以下文章