Articles of android location

为什么我的OnLocationChanged()永远不会被调用?

我想做什么: 我正在尝试开发一个只需要用户在一个活动开始时的位置的应用程序。 因此,只有当用户在活动中时,才能通过网络或GPS更新位置。 因此,用户可以选择室内地图。 我的问题是什么: 但是,我发现应用程序始终使用历史记录位置,并且从不更新位置。 我怀疑我的确有问题 location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER) 但我不确定问题出在哪里。 相关代码片段: 在我的Activity ,我有: locationDetector = new LocationDetector(MapSelectionActivity.this); // try to get the current location if (locationDetector.checkLocationServiceAvailability()) { location = locationDetector.getLocation(); if (location != null) { latitude = location.getLatitude(); longitude = location.getLongitude(); } Log.d(“MapSelectionActivity”, latitude + ” ” + longitude); //locationDetector.stopLocalization(); // stop the localization […]

在LocationManager上使用FusedLocationProviderApi有什么好处吗?

为了获得用户当前位置,我使用过LocationManager: LocationManager locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE); if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); } else if (locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) { location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); } 它易于阅读且代码非常简单。 但我注意到Google最近在Google Play服务中发布了新客户端API模型并建议使用FusedLocationProviderApi ,它看起来更复杂,它是异步的,它需要处理回调等。 在LocationManager上使用FusedLocationProviderApi有什么好处吗?

为android requestSingleUpdate设置超时

我正在使用带有LocationListener的android LocationManager库的例程requestSingleUpdate()reoutine。 我试图实现的function是用户可以按下按钮,应用程序将获取其当前位置并执行反向地理编码以获取大致地址。 我的问题是,根据设备的网络情况,获取位置可能需要很长时间。 如何实现超时,导致我的’requestSingleUpdate()’放弃并告诉用户找出他们自己的血腥地址? 我的代码: LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_FINE); criteria.setPowerRequirement(Criteria.POWER_HIGH); locationManager.requestSingleUpdate(criteria, new LocationListener(){ @Override public void onLocationChanged(Location location) { // reverse geo-code location } @Override public void onProviderDisabled(String provider) { // TODO Auto-generated method stub } @Override public void onProviderEnabled(String provider) { // TODO Auto-generated method stub […]

在android中使用GPS确定车辆的速度

我想知道如何使用gps坐在车内时使用手机获得车辆的速度。 我读过加速度计不是很准确。 另一件事是; 坐在车内时可以访问GPS。 你在建筑物里会不会产生同样的效果? 这是我尝试过的一些代码,但我使用的是NETWORK PROVIDER。我将非常感谢您的帮助。 谢谢… package com.example.speedtest; import android.app.Activity; import android.content.Context; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.widget.Toast; public class MainActivity extends Activity { LocationManager locManager; LocationListener li; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); locManager=(LocationManager)getSystemService(Context.LOCATION_SERVICE); li=new speed(); locManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, li); } class speed implements LocationListener{ @Override public […]

BroadcastReceiver用于定位

我知道BroadcastReceiver会监视文本,电话事件等…但您可以将LocationServices作为基于位置的服务和事件运行吗? 例如,您靠近某个GPS点,手机会通知您。

Android:检查是否使用融合位置提供程序启用了位置服务

根据Android文档: Google位置服务API是Google Play服务的一部分,它提供了一个function更强大的高级框架,可自动处理位置提供程序,用户移动和位置准确性,而不是android.location的平台位置API。 但是使用融合位置提供程序(来自Google Play服务中的位置API)我不知道如何检查用户是否启用了位置或禁用了位置。 使用旧的 android.location很容易: locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 但我不想同时使用Google Play服务融合位置提供商和旧的 Android位置。 如何检查用户是否使用融合位置提供程序启用了位置? 提前致谢。

ACCESS_COARSE_LOCATION权限在Android上提供单元格塔精度

我正在使用FusedLocationApi的requestLocationUpdates()函数进行一些测试。 我正在使用PRIORITY_BALANCED_POWER_ACCURACY 。 城市街区精度对我来说很好。 当我请求ACCESS_FINE_LOCATION权限时,我获得了100米的精度,这对于关闭GPS非常有用 。 由于我不需要GPS精度但是城市块精度,我想只请求ACCESS_COARSE_LOCATION权限。 但是,当我请求ACCESS_COARSE_LOCATION权限时,我获得了2公里的精度。 似乎该设备不再使用Wifi权限,只有单元塔精度。 如何使用ACCESS_COARSE_LOCATION权限获得更好的精度? 注意:我的测试设备禁用了GPS 。

在没有互联网的情况下以编程方式更快地获得GPS协调,但使用网络提供商和移动GPS

我在这个主题上提到了很多问题,但似乎缺少一些我的要求: 我希望GPS位置精确到~0.0001 不想使用互联网; 虽然GSM / CDMA网络还可以 应用程序启动时应以编程方式获取 应该更快,比如说在一分钟之内(比如iPhone,也可能在飞行模式下工作!) 代码应该适用于大多数设备 手机可以随时开启/关闭并随时移动 有没有办法让上述要求的坐标得到满足? 任何示例代码段都将非常感谢。 检查各种应用程序,例如“找我”,“Maverick”,声称显示离线位置。 但在没有互联网的各种情况下,他们不会跟踪位置(在印度)。 我在SO内外都提到了很多旧/新问题。 以下几点: 使用nexus 7离线时是否可以获得gps位置? GPS需要互联网吗? 如何在没有互联网连接的情况下获取当前的确切位置? [注意:我代表我的Android团队提出这个问题,如果被要求,我很乐意澄清细节。 如果你觉得这篇文章属于Android.Stackexchange,那么请移动它。]

从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)); 不是这样的。