gpt4 book ai didi

android - 我应该从哪个类调用 locationManger.removeUpdates()?

转载 作者:行者123 更新时间:2023-11-30 03:33:19 26 4
gpt4 key购买 nike

所以,我有一个 Android 应用程序,它从 LocationManager 类请求 GPS。我有一个要使用该数据的 Activity,还有一个实现 LocationListener 的自定义类。我已经编写了一些自定义方法来将 GPS 值返回给我的其他类。

目前,我正在从我的 Activity 类请求并发布位置更新,而不是我对 LocationListener 类的实现...我认为这是正确的方法着手去做,但我只是想获得有关生命周期等的任何反馈(实现 LocationListener 的类不是 Activity,所以我不我想我什至可以调用 onPause() 等,?)

这是 Activity :

package com.jessescott.sonicity;

import android.app.Activity;
import android.content.Context;
import android.view.View;
import android.widget.TextView;
import android.location.Location;
import android.location.LocationManager;
import android.location.LocationListener;


public class PlayActivity extends Activity {

// GLOBALS
private static final String TAG = "SoniCity";
LocationManager locationManager;
MyLocationListener locationListener;

TextView latitude, longitude;
TextView ActualLatitude, ActualLongitude;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.play_layout);

// GPS
locationListener = new MyLocationListener(this);


// TextViews
latitude = (TextView) findViewById(R.id.Latitude);
longitude = (TextView) findViewById(R.id.Longitude);

ActualLatitude = (TextView) findViewById(R.id.ActualLat);
ActualLatitude.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.v(TAG, "Asking For New Latitude");
ActualLatitude.setText(locationListener.getCurrentLatitude());
}
});

ActualLongitude = (TextView) findViewById(R.id.ActualLon);
ActualLongitude.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.v(TAG, "Asking For New Latitude");
ActualLongitude.setText(locationListener.getCurrentLongitude());
}
});

}

@Override
protected void onPause() {
super.onPause();
// Stop GPS
locationManager.removeUpdates(locationListener);
locationManager = null;
}

@Override
protected void onResume() {
super.onResume();
locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 5, locationListener);
}

@Override
public void onDestroy() {
super.onDestroy();
}

} /* */

...这是 LocationListener 实现:

 package com.jessescott.sonicity;

import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.os.Bundle;
import android.util.Log;

class MyLocationListener implements LocationListener {

private static final String TAG = "SoniCity";
float currentLatitude = 0;
float currentLongitude = 0;

public MyLocationListener(Context context) {
super();
}

// Define all LocationListener methods
public void onLocationChanged(Location location) {
currentLatitude = (float)location.getLatitude();
currentLongitude = (float)location.getLongitude();


}

public void onProviderDisabled (String provider) {
Log.v(TAG, "Provider is " + provider);
}

public void onProviderEnabled (String provider) {
Log.v(TAG, "Provider is " + provider);
}

public void onStatusChanged (String provider, int status, Bundle extras) {
Log.v(TAG, "Status is " + status);
}

// Custom Methods

public String getCurrentLatitude() {
String lat = Float.toString(currentLatitude);
return lat;
}

public String getCurrentLongitude() {
String lon = Float.toString(currentLongitude);
return lon;
}

} /* */

我想因为我已经将它移到一个单独的类(它们曾经是同一个类),所以我只想确保我在正确的位置调用请求/删除。

最佳答案

我没有详细查看您的代码,但据我所见,它看起来不错。 onResume() 是注册监听器的正确位置,onPause() 是取消注册监听器的正确位置,例如电池生命周期得到优化。

future 需要考虑的几件事:

  • 对于健壮的应用程序,请确保您注意从 onStatusChangedonProviderEnabled< 获得的信息onProviderDisabled。我在 stackoverflow.com 上看到过各种问题,答案是注意状态变化等。
  • 另外,为了更好地估计位置,您可以考虑使用 Location.accuracy 值,因为GPS 位置估计的准确性可能会发生变化。一分钟它们可能非常准确,但随后可见卫星发生变化,准确度可能会突然降低很多。在我的应用程序中,我为此使用了一个简单的卡尔曼滤波器,我在对问题 Smooth GPS data 的回答中发布了它的代码。 .
  • 关于android - 我应该从哪个类调用 locationManger.removeUpdates()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17048997/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com