android - GPS 在关闭并重新打开 Android 上的应用程序后不更新位置

标签 android gps

在我关闭我的应用程序一段时间然后再次打开它后,我的应用程序不会更新位置或 有时更新前需要很长时间(大约 5 分钟)。 我该如何解决?这是我的代码

  private LocationManager lm;
private LocationListener locationListener;

  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);    

    lm = (LocationManager) 
        getSystemService(Context.LOCATION_SERVICE);    

    locationListener = new mLocationListener();

    lm.requestLocationUpdates(
        LocationManager.GPS_PROVIDER, 0, 0, locationListener); }


private class myLocationListener implements LocationListener 
{
    @Override
    public void onLocationChanged(Location loc) {
        if (loc != null) {
            TextView gpsloc = (TextView) findViewById(R.id.widget28);
            gpsloc.setText("Lat:"+loc.getLatitude()+" Lng:"+ loc.getLongitude());
        }
    }

    @Override
    public void onProviderDisabled(String provider) {
        // TODO Auto-generated method stub
        TextView gpsloc = (TextView) findViewById(R.id.widget28);
        gpsloc.setText("GPS OFFLINE.");
    }

    @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
    }
}

最佳答案

一些事情...

可能发生的情况是您的应用正在恢复,而不是“第二次”创建。如果您希望它在每次查看 Activity 时都寻找新位置,您需要将以下代码移动到 onResume() 方法中:

lm.requestLocationUpdates(
    LocationManager.GPS_PROVIDER, 0, 0, locationListener); }

您还需要确保在 onPause() 方法中取消注册您的 LocationListener。应该这样做:

@Override
public void onPause() {
    lm.removeUpdates(locationListener);
    super.onPause();
}

看起来你在这一行有错别字:

locationListener = new mLocationListener();

我认为应该是:

locationListener = new myLocationListener();

此外,正如其他人所提到的,没有理由创建一个全新的类来充当您的 LocationListener。事实上,它会不必要地消耗内存,而在移动设备上,内存非常宝贵。

以上所有内容的组合将使您的 Activity 看起来像这样:

public class Whatever extends Activity implements LocationListener {
    private LocationManager lm;
    private LocationListener locationListener;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);    

        lm = (LocationManager)  getSystemService(Context.LOCATION_SERVICE);    
        locationListener = new mLocationListener();
    }

    @Override 
    public void onResume() {
        lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 1, this);
        super.onResume();
    }

    @Override
    public void onPause() {
        lm.removeUpdates(this);
        super.onPause();
    }

    @Override
    public void onLocationChanged(Location loc) {
        if (loc != null) {
            TextView gpsloc = (TextView) findViewById(R.id.widget28);
            gpsloc.setText("Lat:"+loc.getLatitude()+" Lng:"+ loc.getLongitude());
        }
    }

    @Override
    public void onProviderDisabled(String provider) {
        TextView gpsloc = (TextView) findViewById(R.id.widget28);
        gpsloc.setText("GPS OFFLINE.");
    }

    @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
    }
}

关于android - GPS 在关闭并重新打开 Android 上的应用程序后不更新位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1389811/

相关文章:

Android:检测圆形中的触摸事件

java - 为什么我的 android openGL ES 测试渲染器崩溃

iphone - 基于位置的本地通知

iphone - 如何检查我们在 iOS 中的特定应用程序的 GPS 权限是打开还是关闭?

使用 SetTimeout 的 Javascript 重定向不起作用

android - 当进度条到达末尾时播放声音,不起作用!

javascript - MIT APP Inventor 打开时出错。如何解决?

java - 如何提供公共(public)的消息属性,仍然从 Web 项目内部访问它们?

android - 等待当前位置 - GPS - Android Dev

java - 从 GPS 设备读取数据