2012-07-09 70 views
0

在我的应用程序中,我为两个不同的活动使用了两个位置管理器。第一个位置管理器是在创建第一个活动时创建的。然后从第一个活动开始,我创建了第二个活动,即创建第二个位置管理器。在第二个活动,我尝试使用下面的代码按下后退按钮何时停止位置管理器更新:为什么位置管理器在我将其设置为空时仍处于开启状态?

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

LL和LM在第一和第二活性全局声明seperatly。 LL和LM使用下面的代码在第二活动的onCreate初始化:

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

的问题是,如果我不去的第二个活动,并停止在第一个活动的位置更新,那么GPS标志我Android会消失。但是如果我参加第二项活动,请使用后退按钮返回到第一项活动,然后停止第一项活动的位置更新,然后GPS位置标记仍然存在。我使用的代码的同一行停止在第一个活动更新:

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

是否有任何错误的:

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

LL和第一个活动流明当按下启动按钮被初始化代码还是有任何逻辑错误?提前致谢。

+0

请显示更多的代码。如何定义'll'和'lm'?他们是如何初始化的? – 2012-07-09 16:11:03

+0

编辑我的问题。请看看,如果有什么困惑,然后让我知道。 – Piscean 2012-07-09 16:21:38

+0

出于兴趣,为什么不停止onPause中的更新onBackPressed。如果用户在应用程序中按Home键,它仍然会收到更新,即使它不在前台... – barry 2012-07-09 16:39:53

回答

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; 
    } 
} 

不要忘记参考在android:name属性在AndroidManifest.xml文件添加到MyApplication。事情是这样的:

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

要访问您的LocationManager实例调用这段代码:

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

来实例活动内的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); 

}

希望帮助:)