私はこのバグを探して2日間働いています。stackoverflow と Android のドキュメントを検索しましたが、うまくいきませんでした。
私の onLocationChanged コードには、呼び出された回数をカウントするカウンターがあり、電話のアクティビティ画面から矢印を戻して戻ると、更新ごとにカウンターが 2 ずつ上がります。矢印を戻して GPS を更新すると、画面がバックグラウンドにあり、onPause が呼び出されていても、カウンターは onLocationChanged がまだ呼び出されていることを記録します。戻る矢印でアクティビティに出入りすると、アクティビティ画面に入った回数に応じて、GPS 入力の送信ごとに 2 つ以上の更新を取得できます。
すべての GPS コードは機能しますが、これらの複数のインスタンスは適切ではなく、2 つの更新間の移動距離など、私がやろうとしている他のことを台無しにします。
これが私のコードの関連部分だと思うものです。明らかに主要部分は省略しましたが、ポイントは、バックアローアウト後にこの画面に戻った後、GPSデータポイントを1回送信すると、画面に戻った回数に応じてn変数が1以上増加することです.
私は明らかなことをしているに違いありませんが、それを見つけることができません。
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 のドキュメントと一致します。
助けてください。