2012-07-10 51 views
0

UPDATE#2。我最初的問題是由兩位回答者的善意解決的。顯然,我需要開始一個新的問題,即運行結果代碼不會停止GPS。但現在沒有錯誤,所以我會將此標記爲已解決,如果我知道如何:-)OnPause停止GPS

UPDATE。

我有「工作」代碼感謝評論唯一的問題是,它沒有做它應該做的。它的工作原理是沒有錯誤。

爲了使它工作,我在活動的頂部添加了全局。

protected LocationListener ll; 
protected LocationManager lm; 

而且使用該代碼的onPause

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

一切編譯和運行在手機上。我顯示GPS位置。麻煩的是,目標是讓GPS關閉,以便電池離開應用程序後不會死機。但GPS保持打開狀態。我看到這是一個常見的投訴,並沒有看到答案。我認爲lm.removeUpdates(ll)是解決方案,但它不起作用。

---------------原帖-------------------------

我想添加一些OnPause代碼來停止我的GPS更新。我已經厭倦了至少12個來自stackoverflow的代碼示例,包括問題和答案,並且都在Eclipse中給出了錯誤。

我的GPS代碼是在這裏(正常工作):

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

我正在代碼從網絡上的例子,他們沒有工作。這裏是一個

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

真的沒關係我所說的lm,它給出了一個錯誤,它無法解決它。我使用哪個示例代碼並不重要,它們都不是無錯的。

我必須做一些非常愚蠢的簡單...

回答

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); } – 2012-07-10 05:57:39

+0

@AllenEdwards:你可以在應用程序崩潰時提供日誌 – 2012-07-10 06:01:25

+0

@AllenEdwards:嘗試使用'public void onPause(){ super。的onPause(); lm.removeUpdates(ll); }' – 2012-07-10 06:04:51

0

你要使用的變量是在短短可見onCreate的範圍。你需要使用一個成員變量。

您需要到您的類:

protected LocationListener ll; 
protected LocationManager lm; 

然後你只需要你的LL之前刪除LocationListener的,並使用LL到您的onPause代碼。對於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 保護無效的onPause(){// TODO自動生成方法存根 的System.out.println( 「在的onPause()一個intrat」); 如果(LM!= NULL){ lm.removeUpdates(LL); } ll = null; lm = null; super.onPause(); } – 2012-07-10 06:07:13