0

我已经工作了 2 天来寻找这个错误。我搜索了 stackoverflow 和 Android 文档,但没有成功。

我的 onLocationChanged 代码中有一个计数器,用于计算它被调用的次数,如果我将箭头从手机上的活动屏幕返回并返回,每次更新计数器都会增加 2。如果我返回箭头并更新 GPS,计数器记录 onLocationChanged 仍然被调用,即使屏幕在后台并且 onPause 已被调用。如果我使用后退箭头进出活动,则每次 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();
    }

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

请帮忙。

4

1 回答 1

3
  LocationListener ll = new mylocationlistener();

LocationListener是您的方法 onCreate() 的本地方法。您的 LocationManager lm 也是如此。因此,当您删除更新时,它不能与您声明为类变量的管理器和侦听器一起使用。写成

lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
ll = new mylocationlistener(); in your onCreate().
于 2012-07-16T03:37:01.007 回答