lm.removeUpdate(LL);不发布更新

时间:2012-07-16 03:33:41

标签: android gps

我已经工作了两天寻找这个bug。我没有运气搜索stackoverflow和Android文档。

我的onLocationChanged代码中有一个计数器,它计算它被调用的次数,如果我将箭头退出电话的活动屏幕并返回,则每次更新时计数器将增加2。如果我退出箭头并更新GPS,计数器会记录即使屏幕在后台并且已调用onPause,onLocationChanged仍然会被调用。如果我使用后退进出活动,我可以根据活动屏幕输入的次数,每次GPS输入发送两次以上的更新。

所有的GPS代码都有效,但是这些多个实例并不好,它们搞砸了我想要做的其他事情,比如两次更新之间的距离。

以下是我认为代码的相关部分。显然我省略了主要部分,但重点是在反向箭头后返回到此屏幕后,单个发送的GPS数据点将n变量增加一个以上,具体取决于我返回屏幕的次数

我必须做一些显而易见的事情,但我找不到它。

public class Data extends Activity {


protected LocationListener ll;
protected LocationManager lm;
static int n = 0;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.data);
    LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
    LocationListener ll = new mylocationlistener();
    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, ll);
}


    class mylocationlistener implements LocationListener{
        @Override
        public void onLocationChanged(Location location) {
            if (location != null){
                n = n + 1;
                                    textData.setText("\n" + n);
                            }
     }

        @Override
    protected void onPause() {
        if(lm != null) {
            lm.removeUpdates(ll);
        }
        ll = null;
        lm = null;
        super.onPause();
    }

我唯一的线索是,如果我从if(lm!= null)中取出lm.removeUpdates(ll),那么代码崩溃会让我认为lm必须为null并且lm.removeUpdates(ll) )一定不是正确的,但它与我能找到的所有例子以及Android文档相匹配。

请帮忙。

1 个答案:

答案 0 :(得分:3)

  LocationListener ll = new mylocationlistener();

这个LocationListener是你的方法onCreate()的本地。所以你的LocationManager lm.So当你删除更新它不与你声明为类变量的管理器和监听器一起工作。 只需写为

lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
ll = new mylocationlistener(); in your onCreate().