从Location对象获取卫星数量

Get*_*ame 6 gps android location satellite

我正在使用GPS提供商和LocationListener.onLocationChanged(位置位置)来接收位置修复.
文档说,Location.getExtras()包含下一个键/值对:

卫星 - 用于导出修复的卫星数量

但是在练习中我得到一个空的额外物体 - 那里没有任何数据.
这是否意味着我正在获得A-GPS修复而不是GPS?

小智 21

要获得GPS引擎使用的卫星数量,您需要实施android.location.GpsStatus.Listener并实施其方法onGpsStatusChanged().

例...

public void onGpsStatusChanged(int event) {
    int satellites = 0;
    int satellitesInFix = 0;
    int timetofix = locationManager.getGpsStatus(null).getTimeToFirstFix();
    Log.i(TAG, "Time to first fix = " + timetofix);
    for (GpsSatellite sat : locationManager.getGpsStatus(null).getSatellites()) {
        if(sat.usedInFix()) {
            satellitesInFix++;              
        }
        satellites++;
    }
    Log.i(TAG, satellites + " Used In Last Fix ("+satellitesInFix+")"); 
}
Run Code Online (Sandbox Code Playgroud)


小智 8

我使用Location.getExtras().getInt("satellites"),它给出了正在使用的卫星数量.


art*_*erx 6

由于 Android API 24GpsStatus已弃用,因此应该使用GnssStatus. 让我们有一个处理 Gps 数据的活动或服务并且LocationManager已经创建。

private GnssStatus.Callback gnssCallback;

public void initCallbacks() {
    ....
    gnssCallback = new GnssStatus.Callback() {
        @Override
        public void onSatelliteStatusChanged(@NonNull GnssStatus status) {
            final int satelliteCount = status.getSatelliteCount();
            int usedCount = 0;
            for (int i = 0; i < satelliteCount; ++i)
                if (status.usedInFix(i))
                    ++usedCount;
            Log.d("MyServiceTag", "satellites count = " + satelliteCount + ", used = " + usedCount);
        }
    };
    locationManager.registerGnssStatusCallback(gnssCallback, new Handler(Looper.myLooper()));
    ....
}

public void deinitCallbacks() {
    ....
    locationManager.unregisterGnssStatusCallback(gnssCallback);
    ....
}
Run Code Online (Sandbox Code Playgroud)

initCallbacks()应该在locationManager初始化后调用。deinitCallbacks()当不再需要有关卫星数量的信息时,例如在 中,应该调用onDestroy()GnssStatus.getSatelliteCount()返回已知卫星的总数,GnssStatus.usedInFix(int i)表明第 i 颗卫星是否已用于最实际的位置捕获。


Ren*_*eno 1

不,这意味着您的手机制造商决定不实施此操作。(或者您可以使用NETWORK_PROVIDER不使用卫星的)

使用 aNmeaListener并解析句子以了解可见或使用的卫星数量。