gpt4 book ai didi

android - 为什么 isProviderEnabled() 方法即使在建筑物内也总是返回 true

转载 作者:搜寻专家 更新时间:2023-11-01 08:10:17 27 4
gpt4 key购买 nike

在这种情况下,我使用 GPS 作为提供者,我尝试在建筑物内行走,但它似乎找不到位置。是的,在建筑物中 GPS 不起作用是有道理的。那么,为什么 isProviderEnabled 返回 true?无论如何,我应该以什么方式实现“搜索 GPS 信号”?

            String context = Context.LOCATION_SERVICE;
locman = (LocationManager)getSystemService(context);


Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setPowerRequirement(Criteria.POWER_LOW);
String provider = locman.getBestProvider(criteria, true);

if (locman.isProviderEnabled( LocationManager.GPS_PROVIDER )) {
// Change from 'Searching for GPS signal to Use GPS'
txtGPS.setText("Use GPS");

}
locman.requestLocationUpdates(
provider,MIN_TIME, MIN_DISTANCE, locationListener);

最佳答案

isProviderEnabled() 只查看您是否启用了 GPS,它不会关心您是否看到任何卫星!

如果你想检查,如果有任何卫星,你必须使用 gpslistener,这是如何使用 gpslistner:

/**
* Hier wird ein neuer GPSListener erstellt.
* Dieser Überprüft ob es Sichtbare Sattelitten gibt.
*/
mLocationManager.addGpsStatusListener(new GpsStatus.Listener() {

public void onGpsStatusChanged(int event) {

// Hier wird der EVENT gefiltert
// Dieser EVENT erscheint immer wenn GPS Satteliten in sicht sind
if (event == GpsStatus.GPS_EVENT_SATELLITE_STATUS) {
// GpsStatus casten
GpsStatus status = mLocationManager.getGpsStatus(null);

// Interable sats instanzieren und casten
Iterable<GpsSatellite> sats = status.getSatellites();

// SATCOUNT instanzieren, wird benötigt um die Satteliten zu zählen
int SATCOUNT = 0;

// Interator satI instanzieren und casten.
Iterator<GpsSatellite> satI = sats.iterator();

// Hier wird die anzahl der Satteliten gezählt
while(satI.hasNext()){
// Den Interator auf den nächsten Satteliten verweisen
GpsSatellite satellite = satI.next();

// Satelitten zählen
SATCOUNT++;
Log.d("GPSListner", "While with SATCOUNT = " + SATCOUNT + " Elevation des Satellites = " + satellite.getElevation());


}

// Prüfen ob SATCOUNT 4 Satelitten hat
if(SATCOUNT > GPS_SAT_COUNT){

String test = String.valueOf(SATCOUNT);
Log.d("GPSSTATUS", "(true) Anzahl der Sattelitten: " + test );

// Boolean mGpsOk auf true setzen
GPSService.mGpsOk = true;
}else{

String test2 = String.valueOf(SATCOUNT);
Log.d("GPSSTATUS", "(fasle) Anzahl der Sattelitten: " + test2 );

// Boolean mGpsOk auf false setzen
GPSService.mGpsOk = false;

}

}
}
});

要让它正常工作,您需要启动一个要使用 gps 的位置管理器,现在您的 gpslistner 可以检查 View 中是否有任何卫星并写入变量 true 或 false。之后您可以检查 Variabel。如果它为真( View 中至少有 4 个卫星),您可以使用 Criteria.ACCURACY_FINE,否则您可以使用 Criteria.ACCURACY_COARSE。 不要忘记为两者设置权限!

最好的问候

Safari

关于android - 为什么 isProviderEnabled() 方法即使在建筑物内也总是返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10411998/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com