2012-07-10 4 views
0

업데이트 # 2. 나의 초기 질문은 대답 한 두 사람의 친절함에 의해 해결되었다. 분명히 결과 코드가 실행되는 동안 GPS를 멈추지 않는다는 사실에 대해 새로운 질문을 시작해야합니다. 하지만 오류가 없으므로 다음과 같이 알면 해결 된 것으로 표시합니다.OnPause GPS를 중지합니다.

업데이트.

의견을 보내 주시면 감사하겠습니다. 유일한 문제는 그것이 수행해야하는 일을하지 않는다는 것입니다. 오류가 없다는 점에서 효과적입니다.

작동 시키려면 전역으로 활동 상단에 추가했습니다.

protected LocationListener ll; 
protected LocationManager lm; 

그리고는

@Override 
    protected void onPause() { 
     if(lm != null) { 
      lm.removeUpdates(ll); 
     } 
     ll = null; 
     lm = null; 
     super.onPause(); 
    } 

모든 컴파일 및 전화에서 실행이 OnPause 코드를 사용했다. GPS 위치가 표시됩니다. 문제는 애플리케이션을 종료 한 후에 배터리가 방전되지 않도록 GPS를 끄는 것입니다. 그러나 GPS는 계속 켜져 있습니다. 나는 이것이 일반적인 불만이며 대답을 보지 못했다는 것을 안다. lm.removeUpdates (ll)가 해결책이라고 생각했지만 작동하지 않습니다.

--------------- 원본 게시물 -------------------------

내 GPS 업데이트를 중지하는 OnPause 코드를 추가하고 싶습니다. 난 stackoverflow에서 질문과 답변 모두 모두 이클립스에서 오류를주는 코드의 적어도 12 개의 예제를 피곤했습니다.

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    textLat = (TextView)findViewById(R.id.textLat); 
    textLong = (TextView)findViewById(R.id.textLong); 
    textTimex = (TextView)findViewById(R.id.textTimex); 
    LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
    LocationListener ll = new mylocationlistener(); 
    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, ll); 
} 
    class mylocationlistener implements LocationListener{ 

     @Override 
     public void onLocationChanged(Location location) { 
      if (location != null) 
      { 
       double pLat = location.getLatitude(); 
       double pLong = location.getLongitude(); 
       long pTime = location.getTime(); 
       DecimalFormat df = new DecimalFormat("#.######"); 
       textLat.setText(df.format(pLat)); 
       textLong.setText(df.format(pLong)); 
       textTimex.setText(Long.toString(pTime)); 
       //textTimex.setText(Long.toString(pTime)); 
       //textTimex.setText(df.format(pLong)); 
      } 
     } 

     @Override 
     public void onProviderDisabled(String provider) { 
      // TODO Auto-generated method stub 
     } 

     @Override 
     public void onProviderEnabled(String provider) { 
      // TODO Auto-generated method stub 
     } 

     @Override 
     public void onStatusChanged(String provider, int status, 
       Bundle extras) { 
      // TODO Auto-generated method stub 
     } 
    } 

내가 웹에 대한 예제에서 코드를 복용하고 있는데 그들 중 누구도 작동하지 :

내 GPS 코드는 여기에 (그것을 잘 작동합니다). 여기에 하나있다

@Override 
public void onPause() { 
    lm.removeUpdates(locationListener); 
    super.onPause(); 
} 

정말로 내가 무엇이라고 부르는지는 문제가되지 않는다. 그것은 해결할 수 없다는 오류를 준다. 내가 사용하는 예제 코드는 중요하지 않으며 오류가없는 코드는 없다.

나는 매우 간단 바보 같은 일을해야

...

답변

1

는 전 세계적으로 locationListener를 선언 등 (외부 활동의에서 onCreate 메소드로부터) :

LocationListener ll; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     ////your code... 
     ll = new mylocationlistener(); 
     ////your code.. 
    } 


    @Override protected void onPause() 
{ 
    super.onPause(); 
    // TODO Auto-generated method stub 
    System.out.println("a intrat in onPause()"); 
    if(lm != null) { 
    lm.removeUpdates(ll); 
    } 
    ll = null; 
    lm = null; 
} 
+0

ll과 lm을 전역으로 선언하면 응용 프로그램이 컴파일되고 실행되지만 해당 활동을 종료하면 충돌이 발생합니다. 내가 가지고있는 것은 @Override입니다. public void onPause() { lm.removeUpdates (ll); } –

+0

@AllenEdwards : 앱이 충돌 할 때 로그를 제공 할 수 있습니까? –

+0

@AllenEdwards : public void onPause() { super.onPause(); lm.removeUpdates (ll); }' –

0

사용하려는 변수는 단지 볼 수 있습니다 onCreate의 범위. 멤버 변수를 사용해야합니다. 그럼 당신은 당신의 LL 전에 LocationListener를 제거하고 onPause 코드로 LL를 사용할 필요가

protected LocationListener ll; 
protected LocationManager lm; 

:

당신은 당신의 클래스 A에 필요합니다. 그리고 lm과 LocationManager도 마찬가지입니다.

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    textLat = (TextView)findViewById(R.id.textLat); 
    textLong = (TextView)findViewById(R.id.textLong); 
    textTimex = (TextView)findViewById(R.id.textTimex); 
    lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
    ll = new mylocationlistener(); 
    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, ll); 
} 
+0

정확히 무엇을 말하는지 확실치 않지만 보호 된 LocationListener ll을 추가했습니다. lm에 대해서도 마찬가지 였고 OnPause 코드를 다른 예제로 변경했는데 충돌이 발생하지 않았습니다. 또한 GPS를 종료하지 않습니다. @Override protected void onPause() { // TODO 자동 생성 된 메서드 스텁 System.out.println ("onPause()"에있는 intrat); if (lm! = null) { lm.removeUpdates (ll); } ll = null; lm = null; super.onPause(); } –