机器人onStatusChanged不工作(Androids onStatusChanged not

2019-07-18 00:35发布

我想收到通知,如果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;
    }

Answer 1:

如果您的GPS状态没有发生变化(例如,如果你总是在室内无GPS定位)的应用程序运行时,一些设备将不会触发OnStatusChanged()方法。

如果您更改GPS状态,而应用程序正在运行(例如,你在里面并不能得到修复,然后走在外面,并能得到修复,或反之亦然),那么OnStatusChanged()方法应该火上的所有设备。

如果你想要一个完全正常的开源应用作为一个例子,就试试GPSTest(完全公开,我的应用程序):

GPSTest在谷歌播放- https://play.google.com/store/apps/details?id=com.android.gpstest

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

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

在您的活动,使之实现GpsStatus.Listener ,例如:

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

然后,在你活动的声明类变量:

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

}

然后在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定位(因此可能不会触发OnStatusChanged的LocationListener的的)。



Answer 2:

也许你需要检查这个环节GpsStatus.Listener这个监听器使用时,GPS状态发生了变化就知道了。

至于你们所指向的方法,它是用来知道什么时候该供应商的地位发生变化,如文档中提到的LocationListener的



Answer 3:

我的工作是GPS过去几周和任何从我的测试发现,有可能是一个可能获得建筑物内的GPS信号。 如果你在一个地下室,那么你将永远不会得到。 我从我试过和95%的时间让我的纬度和经度始终。

你无法控制这一点。 GpsLocationProvider自动使用辅助SUPL如果有可用的互联网或WiFi连接。 当网络不可访问的独立情况下才会被使用。 辅助数据帮助锁定到GPS卫星信号。 在室内的情况下,你可以看到2-3颗卫星(这取决于你的芯片组的质量)。 如果没有卫星信号进行扫描,你不能得到修复。

谢谢,拉梅什小号



文章来源: Androids onStatusChanged not working