0

在我的应用程序中,我将两个位置管理器用于两个不同的活动。第一个位置管理器是在创建第一个活动时创建的。然后从第一个活动开始,我创建了第二个活动,该活动正在创建第二个位置管理器。在第二个活动中,我试图在按下后退按钮时使用以下代码停止位置管理器更新:

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

ll 和 lm 在第一个和第二个活动中分别全局声明。ll 和 lm 在第二个活动的 onCreate 中使用以下代码进行初始化:

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

问题是,如果我不去第二个活动并停止第一个活动的位置更新,那么我的 Android 中的 GPS 标志就会消失。但是如果我去第二个活动,使用返回按钮回到第一个活动,然后停止第一个活动的位置更新,那么 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

您可以拥有 的单个实例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 回答