Multitude of location sources- 多种获取位置的程序
GPS, Cell-ID, and Wi-Fi 每一个都给用户提供了位置。根据移动的精确度,速度和耗电量选择用哪一种。
- 用户移动
- 因为用户的位置一直在移动,你必须每隔一段时间估计用户的位置。
- 确保精确
位置的估计源于程序的位置不是持久准确的。每隔十秒接受一次位置信息,可呢过更加准确比最近位置获取的信息。
// Acquire a reference to the system Location Manager LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); // Define a listener that responds to location updates LocationListener locationListener = new LocationListener() { public void onLocationChanged(Location location) { // Called when a new location is found by the network location provider. makeUseOfNewLocation(location); } public void onStatusChanged(String provider, int status, Bundle extras) {} public void onProviderEnabled(String provider) {} public void onProviderDisabled(String provider) {} }; // Register the listener with the Location Manager to receive location updates locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
配置权限
如果同时使用了NetWorkProvider和GPS_Provider 必须使用Access_FINE_LOCATION权限。第一次加载时,获取gps的经纬度坐标比较耗时,大约需要等待10秒钟左右,具体的和设备,已及所处的环境有关,在室外获取比较快一些。
通过Cateria获取最近获取GPS的方法
private void getLocation() { // 获取位置管理服务 LocationManager locationManager; String serviceName = Context.LOCATION_SERVICE; locationManager = (LocationManager) this.getSystemService(serviceName); // 查找到服务信息 Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_FINE); // 高精度 criteria.setAltitudeRequired(false); criteria.setBearingRequired(false); criteria.setCostAllowed(true); criteria.setPowerRequirement(Criteria.POWER_LOW); // 低功耗 String provider = locationManager.getBestProvider(criteria, true); // 获取GPS信息 Location location = locationManager.getLastKnownLocation(provider); // 通过GPS获取位置 updateToNewLocation(location); // 设置监听器,自动更新的最小时间为间隔N秒(1秒为1*1000,这样写主要为了方便)或最小位移变化超过N米 locationManager.requestLocationUpdates(provider, 0, 0, locationListener); } private void updateToNewLocation(Location location) { TextView tv1; tv1 = (TextView) this.findViewById(R.id.tv1); if (location != null) { double latitude = location.getLatitude(); double longitude= location.getLongitude(); tv1.setText("维度:" + latitude+ "\n经度" + longitude); } else { tv1.setText("无法获取地理信息"); } } private final LocationListener locationListener = new LocationListener() { @Override public void onLocationChanged(Location location) { updateToNewLocation(location); } @Override public void onProviderDisabled(String provider) { } @Override public void onProviderEnabled(String provider) { } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } };
如果GPS设置未打开通过一下方式打开
private void openGPSSettings() { LocationManager alm = (LocationManager) this .getSystemService(Context.LOCATION_SERVICE); if (alm .isProviderEnabled(android.location.LocationManager.GPS_PROVIDER)) { Toast.makeText(this, "GPS模块正常", Toast.LENGTH_SHORT) .show(); getLocation(); return; } Toast.makeText(this, "请开启GPS!", Toast.LENGTH_SHORT).show(); Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); startActivityForResult(intent,GPS_CODE); //此为设置完成后返回到获取界面 }
Android 位置获取
最新推荐文章于 2022-11-30 14:18:19 发布