2012-07-09 3 views
0

내 앱에서 두 가지 다른 활동을 위해 두 개의 위치 관리자를 사용하고 있습니다. 첫 x 째 활동이 작성 될 때 첫 x 째 위치 관리자가 작성됩니다. 그리고 첫 번째 활동에서 두 번째 활동을 만들어 두 번째 위치 관리자를 만듭니다. 두 번째 활동에서, 나는 다시 버튼을 누르면 다음과 같은 코드를 사용하여 위치 관리자 업데이트를 중지하려고 :Location Manager를 null로 설정 한 이유는 무엇입니까?

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

LL 및 LM이 각각 따로 둘 다 제 1 및 제 2 활동에 전 세계적으로 선언됩니다. LL 및 LM은 다음과 같은 코드를 사용하여 두 번째 활동에서 onCreate에서 초기화됩니다

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

문제는 그 나는 두 번째 활동으로 이동의 첫 번째 활동의 위치 업데이트 후 GPS 기호를 중지하지 않을 경우 내 Android가 사라집니다. 하지만 두 번째 활동으로 돌아가서 뒤로 버튼을 사용하여 첫 번째 활동으로 돌아온 다음 첫 번째 활동의 위치 업데이트를 중지하면 GPS 위치 신호가 계속 표시됩니다. 시작 버튼을 누르면 초기화됩니다

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

LL 먼저 활동에 임 :

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

실수 어떤 종류의에 거기에 내가 같은 코드의 라인을 사용하여 첫 번째 활동에 업데이트를 중지하고 코드 또는 논리 오류가 있습니까? 미리 감사드립니다.

+0

더 많은 코드를 표시하십시오. 'll'과'lm'은 어떻게 정의되어 있습니까? 그들은 어떻게 초기화됩니까? –

+0

이 (가) 내 질문을 편집했습니다. 보세요. 혼란스러운 점이 있으면 알려주세요. – Piscean

+0

onBackPressed가 아닌 onPause에서 업데이트를 중지하는 것이 좋습니다. 사용자가 앱의 홈 키를 누르면 포 그라운드에 있지 않아도 업데이트가 계속 수신됩니다 ... – barry

답변

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

AndroidManifest.xml 파일에 android:name 속성에 MyApplication에 대한 참조를 추가하는 것을 잊지 마세요 : 다음은 예입니다. 이런 식으로 뭔가 :}

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

: 당신이 사용하는 액티비티 내부을 locationManager 인스턴스를 인스턴스화하기 위해

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

:

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

는이 코드 조각을 호출 당신을 locationManager 인스턴스에 액세스하려면

희망이 도움이됩니다.

관련 문제