在我的应用中,我使用两个位置管理器进行两项不同的活动。创建第一个活动时会创建第一个位置管理器。然后从第一个活动我创建第二个活动,创建第二个位置管理器。在第二个活动中,我试图在按下后退按钮时使用以下代码停止位置管理器更新:
@Override
public void onBackPressed() {
lm.removeUpdates(ll);
ll = null;
lm = null;
finish();
}
ll和lm在第一个和第二个活动中分别全局声明。 使用以下代码在第二个活动的onCreate中初始化ll和lm:
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);
}
代码中是否存在任何错误或是否存在任何逻辑错误?提前谢谢。
答案 0 :(得分: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;
}
}
不要忘记在MyApplication
文件的android: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);
}
希望有所帮助:)