一旦 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 得到它就显示纬度和经度的主要内容,如果未能解决你的问题,请参考以下文章

如何设置Xcode模拟器地图的当前位置

一旦解除了引导 vue 警报,它就不再工作了

无法弄清楚“一旦10个用户喜欢它就批准帖子”的系统

前端开发工程师 | 广东方纬科技有限公司

SQLite 不立即插入记录

未处理的异常:在处理后使用了一个关注。一旦你在关注上调用了 dispose(),它就不能再使用了