Articles of android location

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

这是我注册我的应用程序以接收位置更新的方式: 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; } 但我得到红线距离。

我什么时候应该使用ACCESS_COARSE_LOCATION权限?

我正在构建一个Android应用程序,它将跟踪用户的地理位置并在地图上绘制他们的路线。 我正在使用Google Play服务位置API,如此处所述。 直观的是我的应用程序需要ACCESS_FINE_LOCATION权限,我将其放入清单中: 我还需要ACCESS_COARSE_LOCATION权限吗? 我需要粗略位置的用例是什么?

地理编码器返回长度为零的地址

Geocoder工作正常,直到今天。 它开始返回0长度的string。 注意:这不是Geocoder线程的重复,我使用intent服务和AsyncTask来启动线程之前得到它(和AsyncTask的方法工作正常,超过8个月),检查此代码和新的代码从谷歌FusedLocationProviderClient(这是官方代码)它也返回零长度的string。 来自官方Android页面的链接显示了如何通过意向服务获得它。 我在Android 5.1上获得完整的地址,但在Android 7.1上,它返回一个长度为零的地址。 我曾经使用的代码,直到今天工作得很好。 private void getAddressFromCoordinates() { new AsyncTask<Void, String, Void>() { @Override protected Void doInBackground(Void… params) { try { addresses.clear(); addresses.addAll(geocoder.getFromLocation(mCurrentLocation.getLatitude(), mCurrentLocation.getLongitude(), 1)); } catch (IOException e) { e.printStackTrace(); showToastAsync(getString(R.string.activity_loc_no_location_info)); } catch (IllegalArgumentException illegalArgumentException) { // Catch invalid latitude or longitude values. showToastAsync("Invalid latitude or longitude values"); } // […]

Google定位服务与Android定位服务

正如我们所知,我们有两个替代scheme可以使我们的应用程序的位置感知我们使用Google的位置服务API(Google Play服务的一部分)或者我们使用Android的位置API。 我在这里遇到的问题是,使用Google的服务,我们必须使用接口com.google.android.gms.location.LocationListener,它为我们提供位置更新。 然而,不像android.location.LocationListener,谷歌的版本不提供我们的位置提供商(GPS或互联网)的状态。 我们在Android位置监听器中有以下方法 abstract void onLocationChanged(Location location) Called when the location has changed. abstract void onProviderDisabled(String provider) Called when the provider is disabled by the user. abstract void onProviderEnabled(String provider) Called when the provider is enabled by the user. abstract void onStatusChanged(String provider, int status, Bundle extras) Called when the provider status changes […]

Android – 如何获得从一个地方到另一个地方的预计驾驶时间?

我需要find从一个地方到另一个地方的估算驾驶时间。 我对这两个地方都有经纬度,但是我不知道该怎么做。 是否有任何API。 谢谢。

从坐标获取位置

我已经给出了纬度和经度的坐标,我想用这些做一个位置对象。没有一个构造函数需要双打一个位置,所以我试着这样: Location l = null; l.setLatitude(lat); l.setLongitude(lon); 但它崩溃。 任何不同的想法?

Android Geofencing

我已经通过了Geofencing的教程 ,我有一个疑问。 Geofencing是否要求您持续监控用户的位置? 或者当转换已经过去的时候,添加Geofence的LocationClient会自动触发? 这可能看起来像一个明显的问题,但教程从来没有提到任何有关从位置pipe理器请求位置更新。

DataBinding是否会干扰本地化活动?

TL; DR 我有一个支持多种语言的应用程序。 尽pipe使用了所有常用的本地化方法,但仍有一项活动未被翻译。 这是应用程序中唯一充分利用DataBinding Activity。 完整的解释 我有一个使用DataBinding的Activity 。 所以基本上,该活动的整个XML布局被封装在<layout>标签中。 这是我膨胀的观点,并获得约束力: SomeActivityBinding binding = DataBindingUtil.setContentView(this, R.layout.some_activity); 在XML有许多TextViews以这种方式设置文本: … android:text="@string/<name of a string>" … 我们为用户提供预定义的语言选项并设置应用程序的语言环境 Locale.setDefault(new Locale("<language name>")); 在英语区域,一切正常。 当应用程序处于不同的区域设置思路时,所讨论的活动中的string仍然以英语显示 – 即使这些string已被翻译成适当的语言,并且位于应用程序其余部分抓取的相同string文件中string从。 在该活动开始之前,应用程序没问题 – 活动开始后我退出,应用程序恢复为英语区域设置,直到它被杀死并重新启动。 如果该活动从未打开过,则应用程序按预期运行。 有没有人有任何想法可能造成这种情况? 谢谢。

Android:LocationManagerdynamic调整minTime / minDistance阈值

这是我听GPS位置更新(使用LocationManager和LocationListener )的方式: locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); listener = new MyLocationistener(); // LocationListener locationManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 30000, // milliseconds (minTime) 20, // meters (minDistance) listener ); 但是我想dynamic调整LocationManager#requestLocationUpdates使用的minTime和minDistance参数。 我的目标是节省电池,根据几个使用政策,即: 如果用户没有移动,请增加minTime以获取位置更新 如果用户移动速度非常快,请增加minDistance 如果用户在室内(无GPS覆盖),则同时增加 如果电池电量过低,请同时增加 …(任何其他启发式) 我想知道: 这是节省电池寿命的好主意吗? 我怎么能做这样的调整? 如果有唯一的select,我可以再次调用LocationManager#removeUpdates和LocationManager#requestLocationUpdates 。 你知道实现这种自适应algorithm的任何想法或示例代码? 编辑:该应用程序是一个跟踪系统,知道人在哪里,以分配任务最接近给定的人的任务。 其实电池几乎不用8个小时,所以我想增加它。