亦余心之所善兮,虽九死其犹未悔。这篇文章主要讲述GPS Android - 只定位一次相关的知识,希望能为你提供帮助。
有没有办法访问GPS一次,而不是有一个不断检查位置更新的looper?
在我的场景中,我感兴趣的是找到当前的坐标而不是与GPS卫星的连续连接。有没有人有任何想法如何做到这一点?提前致谢。
答案首先检查最后知道的位置是否是最近的。如果没有,我相信您必须设置onLocationChanged侦听器,但是一旦获得第一个有效位置,您就可以随时停止更新流。
加成
public class Example extends Activity implements LocationListener {
LocationManager mLocationManager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Location location = mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if(location != null &
&
location.getTime() >
Calendar.getInstance().getTimeInMillis() - 2 * 60 * 1000) {
// Do something with the recent location fix
//otherwise wait for the update below
}
else {
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
}
}public void onLocationChanged(Location location) {
if (location != null) {
Log.v("Location Changed", location.getLatitude() + " and " + location.getLongitude());
mLocationManager.removeUpdates(this);
}
}// Required functions
public void onProviderDisabled(String arg0) {}
public void onProviderEnabled(String arg0) {}
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {}
}
另一答案不要使用getLastKnownLocation,因为这可能会返回null或旧数据。
【GPS Android - 只定位一次】此代码仅在按下按钮时取出位置,而不是每次都取出。人们用来离开位置监听器在每个实例中监听并且终止电池寿命所以使用我通过大量研究发布的代码片段:
// get the text view and buttons from the xml layout
Button button = (Button) findViewById(R.id.btnGetLocation);
final TextView latitude = (TextView) findViewById(R.id.textview4);
final TextView longitude = (TextView) findViewById(R.id.textview5);
final LocationListener locationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
mlocation = location;
Log.d("Location Changes", location.toString());
latitude.setText(String.valueOf(location.getLatitude()));
longitude.setText(String.valueOf(location.getLongitude()));
}@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
Log.d("Status Changed", String.valueOf(status));
}@Override
public void onProviderEnabled(String provider) {
Log.d("Provider Enabled", provider);
}@Override
public void onProviderDisabled(String provider) {
Log.d("Provider Disabled", provider);
}
};
// Now first make a criteria with your requirements
// this is done to save the battery life of the device
// there are various other other criteria you can search for..
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_COARSE);
criteria.setPowerRequirement(Criteria.POWER_LOW);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setSpeedRequired(false);
criteria.setCostAllowed(true);
criteria.setHorizontalAccuracy(Criteria.ACCURACY_HIGH);
criteria.setVerticalAccuracy(Criteria.ACCURACY_HIGH);
// Now create a location manager
final LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
// This is the Best And IMPORTANT part
final Looper looper = null;
// Now whenever the button is clicked fetch the location one time
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
locationManager.requestSingleUpdate(criteria, locationListener, looper);
}
});
推荐阅读
- 5个最好的javascript免费图表库
- Android Studio GeoDataClient无法解析
- 在Android 8中使用带DOZE的GPS
- Android kotlin - 应用程序在检查GPS是否启用时停止
- 如何检查我是否在Android 4.4及以上版本中以编程方式打开gps( [重复])
- Android Geolocation在模拟器中工作但不在手机中工作
- 如何在Android上以编程方式启用或禁用GPS()
- Map返回Null或空Android Studio
- Android GPS FusedLocationProviderClient(经度错误)