2012-08-30 53 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() - 一个显示吐司即使点击后退按钮 - 你解决了这个,并且非常感谢 –