我已经工作了两天寻找这个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文档相匹配。
请帮忙。
答案 0 :(得分:3)
LocationListener ll = new mylocationlistener();
这个LocationListener
是你的方法onCreate()的本地。所以你的LocationManager lm.So当你删除更新它不与你声明为类变量的管理器和监听器一起工作。
只需写为
lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
ll = new mylocationlistener(); in your onCreate().