【问题标题】:How to obtain the GPS position of the user and actualice a textview everytime the position has changed?每次位置发生变化时,如何获取用户的 GPS 位置并实际显示文本视图?
【发布时间】:2011-09-23 23:45:18
【问题描述】:

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

我在 google 上找到了一些示例,但它们都不是很好的示例,因为只捕获一次用户的位置,并且我需要每次位置随用户的新纬度和经度变化时执行 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) {}

}

【问题讨论】:

    标签: android gps


    【解决方案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

    【讨论】:

    • 非常感谢,我会测试,但是我需要它没有实现LocationListener,不实现它怎么做?
    • LocationListener 用于检测位置变化。我看不出它会如何工作。
    • 我的班级不用实现locationlistener,我敢肯定还有别的办法,不实现,怎么办?
    • 好的,我测试了你的方法,但它失败了,它只实现了我通过 DDMS 传递给模拟器的两个第一个 GPS 位置....稍后没有实现 textview。请注意,我必须对您的代码进行细微更改,我必须在代码的其他区域中声明电视,在侦听器之外,我无法处理在您的侦听器上声明的电视。为什么?因为我不需要使用 xml 布局文件。我将粘贴我的代码编辑我的问题,在你的 eclipse 上测试它,你会检查它是否失败并且只接收到两个 GPS 位置,而没有一个更多
    • 我在 onLocationChanged 中设置了一个断点,它只在我发送 gps 位置的前两次被调用……但再也没有了。 ¿发生了什么事?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多