Articles of android location

从2月15日开始,位置精度分布发生了巨大变化

我试图弄清楚一个莫名其妙的情况 – 从2月15日开始,我们在应用程序中捕获的位置读数中非常高的百分比报告精确到10.0米的准确度,这似乎与从GPS源到达的那些强烈相关,如我们所见它几乎完全采用高精度和仅传感器模式(尽管有电池节省的场合)。 在审查了我们的系统之后,我们没有看到任何我们可以自己介绍它的地方。 它会影响我们应用的所有已部署版本。 我们已经开始使用我们的应用程序来获取更多元数据,但是我们希望能够更好地了解这样的事情是如何在瞬间发生的,这会在我们没有更改任何正在运行的服务时影响应用程序的多个版本。 这里有一些与潜在相关的问题: cordova中的navigator.geolocation.getCurrentPosition仅提供10米的精度 FusedLocationApi性能问题:精度似乎限制在10.0米 location.getAccuracy()的奇怪和非常意外的问题 为什么FusedLocationProviderApi永远不会报告精度超过10米? 这记录了吗? cordova地理定位精度上限为10米 还有一些图表显示了我们所看到的内容: 那么 – 有没有其他人看过类似的东西,或者对这里可能发生的事情有所解释?

以编程方式启用位置模式高精度或省电,无需用户访问设置

为什么我这样问:(也是在应用程序中尝试它的原因) 当我们在Lollipop中使用Google地图时会发生这种情况 。 即使位置已禁用,也会在用户从地图应用输入后以高精度模式打开,而无需访问“设置”。 可以实现类似的function以启用蓝牙,其中操作在我的应用程序中启动; 用户需要做出选择,但用户不会重定向到“设置”,使用: startActivity(new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)); 哪个可以在BluetoothAdapter上find,现在我们知道没有LocationAdapter,所以我环顾了gms-> LocationServices ,基本上几乎所有的位置API引用 , android.location.LocationManager,但似乎没有像ACTION_REQUEST_ENABLE可用。 希望有相同的其他方法,更多的人尝试过它。 请注意: context.startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)); 不是这样的。

Google Places API选取器仅显示某些types的位置

我正在制作某些需要用户选择地点的Android应用程序。 我计划使用谷歌地方API.Link:https://developers.google.com/places/android/ 通过Place Picker,这个API提供了很好的方法。 https://developers.google.com/places/android/placepicker 现在假设我只想显示食物types的用户位置(餐厅,酒店等)。 使用Places Browser API可以通过在请求中添加“type = restraunts”属性来完成。 有没有办法只使用Google Places Picker for android显示某些types的地方?

谷歌地方选择器没有在Android Mi手机上推出

我在Android Redmi Phones版本5.1.1中遇到了Google Place Picker的问题。 我使用以下代码启动Google地方选择器。 try { PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder(); startActivityForResult(builder.build(SelectLocationActivity.this), 1); } catch (Exception e) { e.printStackTrace(); Toast.makeText(SelectLocationActivity.this,””+e.getMessage(),Toast.LENGTH_LONG).show(); } 我添加了以下权限和api密钥以及google play服务版本。 它正在开发除Android Redmi Note2之外的所有手机。 任何建议将不胜感激。 提前致谢。

LocationManager的getBestProvider返回null

我有一群人报告了一个我无法重现的错误。 当试图打开MapView它报告getBestProvider返回null并且我知道这意味着找不到满足我的条件getBestProvider提供者,所以如果没有GPS那么它应该回退到network or passive但是它显然不在那些用户设备上。 那甚至意味着GPS关闭并且没有网络连接? 我尝试关闭GPS并将手机置于飞行模式以尝试重现问题,但我仍然能够在没有强制关闭的情况下打开mapview,所以我不知道如何处理这个问题。 locationManager = (LocationManager) this.getSystemService(LOCATION_SERVICE); geocoder = new Geocoder(this); Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_COARSE); List lProviders = locationManager.getProviders(false); for(int i=0; i<lProviders.size(); i++){ Log.d("LocationActivity", lProviders.get(i)); } String provider = locationManager.getBestProvider(criteria, true); // null long minTime = 60000; float minDistance = 5; locationManager.requestLocationUpdates(provider, minTime, minDistance, this); 错误 java.lang.RuntimeException: Unable to start […]

以编程方式将位置模式更改为高精度Android

是否有可能获得用户在位置设置选项下的三种模式中选择的位置模式的信息,即 1.准确度高 2.电池节省 3.仅限GPS 我想以编程方式检查用户是否选择了高精度模式,如果没有,则自动启用它。 可能吗 ? 请指教。

在Android中添加地理围栏时出错(状态代码1000)

我在onAddGeofencesResult(int statusCode, String[] geofenceRequestIds)回调中收到错误, statusCode = 1000 。 我启用了GPS和WiFi。 我还有Google Play服务,我可以跟踪我的位置并请求更新。 为什么我无法添加地理围栏? 我甚至无法从文档示例应用程序添加地理围栏。 我得到以下Toast消息: “添加Geofences:失败,错误代码1000 GeofenceRequestIds = [1,2,1,2]” 从文档(statusCode 1000): public static final int GEOFENCE_NOT_AVAILABLE 地理围栏服务现在不可用。 通常这是因为用户在设置>位置访问中关闭了位置访问权限。 常数值:1000(0x000003e8)

在Android中停止位置监听器

在我的Android应用程序中,我需要在应用程序启动时获取用户的当前GPS位置,仅当位置与先前位置有所不同时。 但问题是当我在应用程序内部如果位置改变( 即如果用户在使用应用程序时旅行)应用程序从头开始。 获取用户当前位置后,我需要停止位置监听器。 removeUpdates方法对我不起作用。 请帮我解决这个问题。 提前致谢 !

融合位置提供程序意外行为

这是我注册我的应用程序以接收位置更新的方式: mLocationRequest = LocationRequest.create(); mLocationRequest.setInterval(Consts.ONE_MINUTE * 10); mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY); mLocationRequest.setFastestInterval(Consts.ONE_MINUTE); Builder builder = new GoogleApiClient.Builder(context); builder.addApi(ActivityRecognition.API); mGoogleApiClient = builder.addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .build(); mGoogleApiClient.connect(); …. …. @Override public void onConnected(Bundle connectionHint) { LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, locationUpdatespendingInent); } 我的待处理意图几乎在确切的请求间隔内在后台调用了…… 到现在为止还挺好。 问题:当WIFI被禁用/未连接到任何网络,或者没有启用3G / 4G网络数据时 – 融合位置提供商不提供新的位置更新!! 我的位置访问设置已打开,并且会检查GPS卫星和WI-FI以及移动网络位置。 更大的问题:有时在这种情况下,我确实通过待定意图接收位置更新回调,但是它知道的最后一个位置(即使它是一小时前,我很久以前离这个地方很远) 根据PRIORITY_BALANCED_POWER_ACCURACY的文档: 与setPriority(int)一起使用以请求“块”级别准确性。 块级精度被认为是大约100米的精度。 使用诸如此类的粗略精度通常会消耗更少的功率。 我期待融合位置提供商在没有其他选择的情况下打开GPS,或者如果他没有任何选择,至少不会提供新的位置更新。 另一个不可预测和令人不安的问题: 我将PRIORITY_BALANCED_POWER_ACCURACY更改为PRIORITY_HIGH_ACCURACY以查看其行为(24小时)。 所有间隔保持不变(更新之间间隔10分钟)。 即使在没有网络/ SIM卡的手机中也确实收到了准确的位置,但是 – 电池耗尽快! 当我查看电池历史时,我惊讶地发现GPS收音机一直处于全传输模式! […]

获取android中两个位置之间的距离?

我需要在两个位置之间获得距离,但我需要像图中的蓝线一样得到距离。 我接下来尝试: public double getDistance(LatLng LatLng1, LatLng LatLng2) { double distance = 0; Location locationA = new Location(“A”); locationA.setLatitude(LatLng1.latitude); locationA.setLongitude(LatLng1.longitude); Location locationB = new Location(“B”); locationB.setLatitude(LatLng2.latitude); locationB.setLongitude(LatLng2.longitude); distance = locationA.distanceTo(locationB); return distance; } 但我得到红线距离。