如何在每次位置发生变化时获取用户的GPS位置并查看文本视图?

时间:2011-09-23 14:09:17

标签: android gps

我正在尝试创建一个简单的活动来读取用户的GPS位置,并在每次用户位置发生变化时实现简单的文本视图。

我在谷歌中找到了一些例子,但所有这些都不是很好的例子,因为只捕获用户的位置一次,我需要每当位置随用户的新纬度和经度而变化时,就会看到textview

我尝试做一个线程,但它失败了,我认为做一个线程不是必要的,我是以错误的方式。

欢迎使用代码示例

编辑:我正在添加用户NickT提出的解决方案。 此解决方案失败。我不知道原因,但只实现了两次textview,我用DDMS传递给模拟器的两个第一个GPS值....之后,thextview没有实现更多次......¿为什么?我在onLocationChanged中创建了一个断点,它只被称为前两次我发送一个gps位置...但从来没有更多。 ¿发生了什么事?

public class GpsMiniActivity extends Activity implements LocationListener{

private LocationManager mLocMgr;
private TextView tv1;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    FrameLayout rl = new FrameLayout(this.getApplicationContext());
    LinearLayout ll= new LinearLayout(this.getApplicationContext());
    ll.setOrientation(LinearLayout.VERTICAL);

    setContentView(rl);
    rl.addView(ll);

    tv1=new TextView(getApplicationContext());
    ll.addView(tv1);

    //setContentView(R.layout.main);
    mLocMgr = (LocationManager) getSystemService(LOCATION_SERVICE);
    mLocMgr.requestLocationUpdates(LocationManager.GPS_PROVIDER,
            500, 0, this);
}
@Override
public void onLocationChanged(Location location) {
    tv1.setText("Lat " +   location.getLatitude() + " Long " + location.getLongitude());
}

@Override
public void onProviderDisabled(String provider) {}

@Override
public void onProviderEnabled(String provider) {}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {}

}

1 个答案:

答案 0 :(得分:1)

绝对最小例子:

public class GpsMiniActivity extends Activity implements LocationListener{

    private LocationManager mLocMgr;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mLocMgr = (LocationManager) getSystemService(LOCATION_SERVICE);
        mLocMgr.requestLocationUpdates(LocationManager.GPS_PROVIDER,
                500, 0, this);
    }
    @Override
    public void onLocationChanged(Location location) {
        TextView tv = (TextView) findViewById(R.id.tv1);
        tv.setText("Lat " +   location.getLatitude() + " Long " + location.getLongitude());
    }

    @Override
    public void onProviderDisabled(String provider) {}

    @Override
    public void onProviderEnabled(String provider) {}

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {}

}

您还需要在清单中使用权限ACCESS_FINE_LOCATION,在main.xml中使用Textview ID tv1