2012-08-30 74 views
1

我有一個使用GPS線的簡單android應用程序的問題。吐司不會從屏幕上消失

我班MyLocationListener實現LocationListener的,並有一個靜態方法調用:

String strText ="My current location is: " + "Latitude = " + location.getLatitude() + " Longitude= " + location.getLongitude(); 
    Toast.makeText(GpsModule.cont, strText, Toast.LENGTH_SHORT).show(); 

問題是顯示該字符串。它出現了,永不結束。當我按下主菜單的按鈕時,即使關閉應用程序,它也會不斷顯示。任何線索?我該如何解決這個問題?

GpsModule類別:

public class GpsModule extends Activity { 

public static Context cont; 
//public static WebView position; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.gps); 
    cont = getApplicationContext(); 
    //position = new WebView(cont); 

    //position = (WebView) findViewById(R.layout.gps); 
    //position.getSettings().setJavaScriptEnabled(true); 


    LocationManager locManager = (LocationManager) getSystemService(LOCATION_SERVICE); 
    LocationListener locListener = new MyLocationListener(); 
    locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locListener); 
} 

MyLocationListener類:

@SuppressLint("ShowToast") 

公共類MyLocationListener實現LocationListener的{

public void onLocationChanged(Location location) { 
    // TODO Auto-generated method stub 
    location.getLatitude(); 
    location.getLongitude(); 

    String strText ="My current location is: " + "Latitude = " + location.getLatitude() + " Longitude= " + location.getLongitude(); 
    Toast.makeText(GpsModule.cont, strText, Toast.LENGTH_SHORT).show(); 

} 

public void onProviderDisabled(String provider) { 
    // TODO Auto-generated method stub 
    Toast.makeText(GpsModule.cont, "GPS disabled", Toast.LENGTH_SHORT).show(); 
} 

public void onProviderEnabled(String provider) { 
    // TODO Auto-generated method stub 
    Toast.makeText(GpsModule.cont, "GPS enabled", Toast.LENGTH_SHORT).show(); 
} 

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

} 

}

+1

你在哪裏叫這些線? –

+1

這是在處理程序或任何異步任務中調用? –

+1

你確定它不是經常被調用嗎? –

回答

3

請閱讀方法LocationManager.requestLocationUpdates()的文檔。

尤其是參數:每10秒

minTime  minimum time interval between location updates, in milliseconds. 

嘗試值10'000。在生產中,你應該考慮價值多於分鐘。

+0

感謝您的幫助。有2個問題: - 一個參數在requestLocationUpdates()中 - 您解決了這個問題,並且非常感謝 - 即使在單擊「上一步」按鈕後仍然顯示「吐司」。 –

+1

Toast顯示不會在UI線程上發生。我認爲你不能改變這一點。您可以查看通知API。 – user802421

1

看起來利ke您的位置偵聽器處於活動狀態並反覆被調用。你在移動你的設備嗎?位置更改時調用LocationListener。

+0

即使手機沒有移動,位置也因數字精度而改變。例如: 50,00443558333333 –

3

我認爲,您將您的代碼添加到您的位置檢測功能中,並且LocationListener處於活動狀態。這意味着您的Toast在GPS檢測到新位置時被調用。

+0

這是正確的。可能的解決方案是什麼?我添加了我的課程的源代碼。你可以看看嗎? –

1

試試這個,

1。

Toast.makeText(getBaseContext(), strText, Toast.LENGTH_SHORT).show(); 

2。

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

3。

@Override 
    public void onResume() { 
     super.onResume(); 
     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 
       Length, long, locationListener); 
    } 

長及應大於0

+0

感謝您的幫助。有2個問題: - 一個參數在requestLocationUpdates() - 一個顯示吐司即使點擊後退按鈕 - 你解決了這個,並且非常感謝 –