【问题标题】:Toast doesn't disappear from screen吐司不会从屏幕上消失
【发布时间】:2012-08-30 15:58:02
【问题描述】:

我使用 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

}

}

【问题讨论】:

  • 你在哪里称呼这些行?
  • 这是在处理程序或任何异步任务中调用的吗?
  • 你确定不是经常调用吗?
  • 注册MyLocationListener 的那一行会很有趣。

标签: android toast


【解决方案1】:

请阅读方法LocationManager.requestLocationUpdates()的文档。

特别是参数:

    minTime     minimum time interval between location updates, in milliseconds.

每 10 秒尝试 10'000 的值。在生产中,您应该考虑的价值超过分钟。

【讨论】:

  • 感谢您的帮助。有 2 个问题: - 一个在 requestLocationUpdates() 中有参数 - 你解决了这个问题,非常感谢 - 一个即使在单击后退按钮后也显示 Toast
  • Toast 显示不会在 UI 线程上发生。我认为你无法改变这一点。您可以查看通知 api。
【解决方案2】:

我认为,您将代码添加到位置检测功能中,LocationListener 处于活动状态。这意味着当 GPS 检测到新位置时会调用您的 Toast。

【讨论】:

  • 没错。可能的解决方案是什么?我添加了我的课程的来源。可以看看吗?
【解决方案3】:

您的位置侦听器似乎处于活动状态并反复被调用。你在移动你的设备吗? LocationListener 在位置改变时被调用。

【讨论】:

  • 即使手机没有移动,由于数字精度,位置也会发生变化。例如:50,00443558333333
【解决方案4】:

试试这个,

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

length 和 long 应该大于 0。

【讨论】:

  • 感谢您的帮助。有 2 个问题: - 一个在 requestLocationUpdates () 中有参数 - 一个在单击后退按钮后仍显示 Toast - 您解决了这个问题,非常感谢
猜你喜欢
  • 1970-01-01
  • 2011-04-26
  • 2021-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-19
  • 1970-01-01
相关资源
最近更新 更多