机器人 onStatusChanged 不工作

标签 android gps location locationmanager locationlistener

如果 GPS_PROVIDER 的状态发生变化,我会尝试接收通知。我在这里找到了以下代码 (http://hejp.co.uk/android/android-gps-example/),但我没有收到通知。

  1. 现在我在大楼里,无法接收到 GPS 信号,所以我不会收到“状态已更改:停止服务”的通知吗?
  2. 什么时候调用 onStatusChanged?
  3. 我做错了什么?

谢谢,

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
    /* This is called when the GPS status alters */
    switch (status) {
    case LocationProvider.OUT_OF_SERVICE:
        Log.v(tag, "Status Changed: Out of Service");
        Toast.makeText(this, "Status Changed: Out of Service",
                Toast.LENGTH_SHORT).show();
        break;
    case LocationProvider.TEMPORARILY_UNAVAILABLE:
        Log.v(tag, "Status Changed: Temporarily Unavailable");
        Toast.makeText(this, "Status Changed: Temporarily Unavailable",
                Toast.LENGTH_SHORT).show();
        break;
    case LocationProvider.AVAILABLE:
        Log.v(tag, "Status Changed: Available");
        Toast.makeText(this, "Status Changed: Available",
                Toast.LENGTH_SHORT).show();
        break;
    }

最佳答案

如果您的 GPS 状态在应用程序运行时没有改变(例如,如果您总是在室内而没有 GPS 定位),则某些设备不会触发 OnStatusChanged() 方法。

如果您在应用程序运行时更改 GPS 状态(例如,您在里面但无法定位,然后走到外面可以定位,反之亦然),则 OnStatusChanged() 方法应该在所有设备上触发。

如果您想要一个功能完备的开源应用程序作为示例,请尝试 GPSTest(完全公开,我的应用程序):

Google Play 上的 GPS 测试 - https://play.google.com/store/apps/details?id=com.android.gpstest

GPSTest 的源代码 - https://github.com/barbeau/gpstest

有关 GPS 的更多详细信息即使您的设备无法修复也会不断更新,您可能需要注册一个 GPSStatus.Listener

在你的Activity中,让它实现GpsStatus.Listener,例如:

public class GpsTestActivity extends TabActivity
    implements LocationListener, GpsStatus.Listener{

然后,在您的 Activity 中声明类变量:

private LocationManager mService;
private GpsStatus mStatus;

...并添加处理 GPSStatus 更改的方法:

public void onGpsStatusChanged(int event) {
    mStatus = mService.getGpsStatus(mStatus);
    switch (event) {
        case GpsStatus.GPS_EVENT_STARTED:
            // Do Something with mStatus info
            break;

        case GpsStatus.GPS_EVENT_STOPPED:
            // Do Something with mStatus info
            break;

        case GpsStatus.GPS_EVENT_FIRST_FIX:
            // Do Something with mStatus info
            break;

        case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
            // Do Something with mStatus info
            break;
    }

}

然后在您的 Activity 的 OnCreate() 中注册 GPSStatus.Listener:

 mService = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
 mService.addGpsStatusListener(this);

在 GPSTest 应用程序中,当前可用卫星的列表显示在每次 GPSStatus.Listener 更新的屏幕上,基于以下代码:

https://github.com/barbeau/gpstest/blob/master/GPSTest/src/main/java/com/android/gpstest/GpsStatusFragment.java

这样,即使您的手机无法获得 GPS 定位,您也会收到系统 GPS 状态的主动更新(因此可能不会触发 LocationListener 的 OnStatusChanged)。

关于机器人 onStatusChanged 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14222152/

相关文章:

java - 在运行时为 Android 执行嵌入在 Java 中的 Groovy 脚本

c++ - NMEA 库 - nmeaINFO 为空

android - JS代码部署在Web上

swift - OS X 保存位置权限

android - 如何在TextView上创建拨号链接?

Android 4.2 getSupportFragmentManager().getMap() 返回 null

Javascript : How do I map gps coordinates to an image

android - 如何获得 5 分钟 android 一次的 gps 位置?

街道上的android限速

android - android.graphics包和SurfaceFlinger的关系