onGpsStatusChanged不为GpsStatus.Listener触发

时间:2013-08-28 20:12:05

标签: android gps android-location

想听 gps可用性。关注this。但是,即使禁用/启用了gps,onGpsStatusChanged也未被触发。试过多部手机。此外,查看了相关的stackoverflow Qns,例如thisthisthis。但是没有成功。任何帮助表示赞赏。谢谢!

代码段:

监听

Listener mGPSListener = new GpsStatus.Listener() {

    @Override
    public void onGpsStatusChanged(final int event) {
        Log.d(TAG, "---onGpsStatusChanged---");
        switch (event) {
            case GpsStatus.GPS_EVENT_STARTED:
                Log.d(TAG, "GPS_EVENT_STARTED");
                break;
            case GpsStatus.GPS_EVENT_FIRST_FIX:
                Log.d(TAG, "GPS_EVENT_FIRST_FIX");
                break;
            case GpsStatus.GPS_EVENT_STOPPED:
                Log.d(TAG, "GPS_EVENT_STOPPED");
                break;
            case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
                Log.d(TAG, "GPS_EVENT_SATELLITE_STATUS");
                break;
            default:
                Log.d(TAG, "SOMETHING_ELSE");
                break;
        }


    }


};

服务

.....
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        super.onStartCommand(intent, flags, startId);
        Log.d(TAG, "onStartCommand");
        Context ctx = getBaseContext();
        Log.d(TAG, "Done, " + ctx);
        LocationManager locManager = (LocationManager)
        ctx.getSystemService(Context.LOCATION_SERVICE);
        Log.d(TAG, "Got locManager");
        locManager.addGpsStatusListener(mGPSListener);
        Log.d(TAG, "Added -> locManager.addGpsStatusListener(mGPSListener)");
        return START_STICKY;


    }
.....

可以查看contextLocationManager等的日志语句。但onGpsStatusChanged完全没有。

EDIT1 我的清单包含以下权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

1 个答案:

答案 0 :(得分:9)

好的,所以这是我的发现。

如果您希望调出onGpsStatusChanged GpsStatus.Listener,则需要不要仅使用LocationManageraddGpsStatusListener注册到requestLocationUpdates,而是通过{监听位置更新{1}}。

当我开始通过requestLocationUpdates LocationManager课程的{{1}}收听位置更新时,我开始获得gps状态更改。