首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用OnStatusChanged从GPS_PROVIDER切换到NETWORK_PROVIDER?

使用OnStatusChanged从GPS_PROVIDER切换到NETWORK_PROVIDER?
EN

Stack Overflow用户
提问于 2013-01-11 01:35:06
回答 1查看 9.2K关注 0票数 0

我正在开发一个需要精确的GPS修复的应用程序。如果GPS_PROVIDER已启用,但不可用(就像在隧道中时),我希望我的应用程序切换到NETWORK_PROVIDER

我可以使用locationListener的OnStatusChanged OUT_OF_SERVICE来识别是否无法进行GPS修复吗?

如下所示:

代码语言:javascript
复制
public void onStatusChanged(String provider, int status, Bundle extras) {
    //0 = OUT_OF_SERVICE
    if (status == 0) {
        //try requesting updates using NETWORK_PROVIDER
        lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, ll);
        //TOAST MESSAGE: GPS UNAVAILABLE ATTEMPTING FIX WITH NETWORK
        ...

我是否正确地使用了OnStatusChanged?有没有更简单更好的方法来先尝试GPS修复,如果不可用,就切换到网络?

EN

回答 1

Stack Overflow用户

发布于 2013-01-11 01:47:56

添加lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, ll);它将开始使用网络获取位置,但一旦你从隧道中出来,它将开始从网络和全球定位系统获取。使用location.getProvider(),你应该能够区分它是全球定位系统还是网络。

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

如果你在应用程序运行时改变了GPS状态(例如,你在里面,无法得到修复,然后走到外面,可以得到修复,反之亦然),那么OnStatusChanged()方法应该会在所有设备上触发。

如果你想要一个完全正常工作的开源应用作为例子,可以试试安卓团队的Mike Lockwood的GPSTest。

GPSTest on Google Play

Source code for GPSTest

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

代码语言:javascript
复制
private LocationManager mService;
private GpsStatus mStatus;

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

代码语言:javascript
复制
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()中注册GPSStatusListener:

代码语言:javascript
复制
mService = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
mService.addGpsStatusListener(this);

在GPSTest应用程序中,当前可用的卫星列表将根据此code随每个GPSStatusListener更新一起显示在屏幕上。

这样,即使您的手机无法获得GPS修复(因此可能不会触发LocationListenerOnStatusChanged ),您也会收到系统的GPS状态的活动更新。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14263878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档