我的应用应使用GPS
,Cellular network
或WiFi
找到当前位置。我可以通过GPS
LocationManager locationmanager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
LocationListener locationlistener = new mylocationlistener();
locationmanager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationlistener);
其中mylocationlistener()
函数如下所示
private class mylocationlistener implements LocationListener {
@Override
public void onLocationChanged(Location location) {
if (location != null) {
Toast.makeText(LocationActivity.this,"latitude: "+
location.getLatitude() + "longitude: " + location.getLongitude(),
Toast.LENGTH_LONG).show();
}
}
它工作正常。我可以使用celluler网络通过上面的代码查找当前位置,我需要更改locationmanager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationlistener);
它很好,但我的挑战是
所以,我的问题是,如果有办法确定GPS信号强度而不打开GPS
?
感谢您提前寻求任何帮助。
答案 0 :(得分:2)
不,您无法确定未打开的传感器的信号强度。
为了确定卫星和GPS等手机之间的信号强度,两者需要发送和接收GPS信号,这自然要求打开手机上的GPS。
同样的逻辑表明,如果不打开WiFi,就无法列出附近的WiFi网络。
您最好的选择是暂时将其打开,如果您决定不使用它,请将其关闭。
确定是否使用GPS的最简单方法是打开它,然后使用LocationManager的getBestProvider方法。如果最佳提供商不是GPS,请再次将其关闭。您还可以使用getGpsStatus方法获取GpsStatus对象,其中包含最大卫星数量和接收修复所花费的时间等指标。
有关如何启用/禁用GPS,请参阅Enable GPS programatically like Tasker。遗憾的是,您只能通过编程方式在2.3之前的手机上执行此操作,然后才能通过漏洞利用。 “正确”的方法是提示用户启用或禁用它。