【问题标题】:onGpsStatusChanged NOT firing for GpsStatus.ListeneronGpsStatusChanged 不为 GpsStatus.Listener 触发
【发布时间】:2013-09-01 02:00:42
【问题描述】:

想听听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 根本没有。

编辑1 我的清单包含以下权限:

<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"/>

【问题讨论】:

    标签: android gps android-location


    【解决方案1】:

    好的,这就是我的发现。

    如果您想调用您的GpsStatus.Listener 中的onGpsStatusChanged,您需要不仅使用addGpsStatusListener 将其注册到您的LocationManager,还需要通过requestLocationUpdates 监听位置更新。

    当我通过LocationManager 类的requestLocationUpdates 开始收听位置更新时,我开始获得gps 状态变化。

    【讨论】:

    • 非常感谢。效果很好。
    猜你喜欢
    • 1970-01-01
    • 2014-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2015-06-14
    相关资源
    最近更新 更多