0

私のアプリでは、2つの異なるアクティビティに2つのロケーションマネージャーを使用しています。最初のロケーションマネージャは、最初のアクティビティが作成されるときに作成されます。次に、最初のアクティビティから、2番目のロケーションマネージャーを作成する2番目のアクティビティを作成しています。2番目のアクティビティでは、戻るボタンが押されたときに次のコードを使用してロケーションマネージャーの更新を停止しようとしています。

@Override
public void onBackPressed() {
  lm.removeUpdates(ll);
  ll = null;
  lm = null;
  finish();
}

llとlmは、最初と2番目のアクティビティの両方で別々にグローバルに宣言されます。llとlmは、次のコードを使用して2番目のアクティビティのonCreateで初期化されます。

 lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
 ll = new myLocationListener();
 lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, ll);

問題は、2番目のアクティビティに移動せずに、最初のアクティビティの位置情報の更新を停止すると、AndroidのGPSサインが消えることです。しかし、2番目のアクティビティに移動し、戻るボタンを使用して最初のアクティビティに戻り、最初のアクティビティの位置の更新を停止すると、GPS位置標識はまだそこにあります。同じコード行を使用して、最初のアクティビティで更新を停止しています。

lm.removeUpdates(ll);
ll = null;
lm = null;

最初のアクティビティのllとlmは、スタートボタンが押されたときに初期化されます。

 public void startClick (View target){
      lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
      ll = new myLocationListener();
      lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, ll);
 }

コードに何らかの間違いがありますか、それとも論理的なエラーがありますか?前もって感謝します。

4

1 に答える 1

0

のインスタンスを 1 つ作成LocationManagerして、Application Context. そのためには、 を拡張するクラスを作成する必要がありますApplication。次に例を示します。

public class MyApplication extends Application 
{
   private LocationManager locationManager;

   @Override
   public void onCreate()
   {
     super.onCreate();

     //Initialize here the locationManager or initialize it in one of your
     //Activities. It is your choice.
   }

   //To retrieve the locationManager
   public LocationManager getLocationManger()
   {
      return locationManager;
   }

   //In case you want to initialize the locationManger in one of your Activities
   public void setLocationManager(LocationManager locationMangerIn) 
   {
       locationManager = locationMangerIn;
   }
}

ファイルMyApplicationandroid:name属性に参照を追加することを忘れないでください。AndroidManifest.xmlこのようなもの:

<application android:icon="@drawable/icon" android:label="@string/app_name"
        android:name="com.your_package_name.MyApplication">

locationManager インスタンスにアクセスするには、次のコードを呼び出します。

LocationManger lm = ((MyApplication)activitysContext.getApplication()).getLocationManger();

Activity 内で locationManager インスタンスをインスタンス化するには、次を使用します。

public void startClick (View target){
  LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);

  //You can add the listener now or later. Again, your choice.
  ll = new myLocationListener();
  lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, ll);

  ((MyApplication)activitysContext.getApplication()).setLocationManger(lm);

}

それが役立つことを願っています:)

于 2012-07-09T16:33:35.003 に答える