Articles of android location

如何使用Wifi或GSM或GPS获取粗略位置,以哪个可用?

我的应用程序启动时只需要一个粗略的位置服务。 详细地说,我需要应用程序的粗略位置,以便为用户提供附近的商店信息。 该位置不需要不断更新。 此外,在这种情况下,粗略定位就足够了。 我希望应用程序能够自动选择GSM,wifi或GPS,无论哪个可用。 定位服务也应该是一次性的,以节省电话能量 。 我该怎么办? 我曾尝试单独使用GPS。 我的问题是我不知道如何停止GPS的不断更新的位置function。 我不知道如何让手机从三种方法中选择一种。 非常感谢一些示例代码或想法。

使用经度和纬度比较两个位置

嗨我需要在onchangelocation()上调用一个事件,通过比较当前纬度和经度与一些保存的纬度和经度,但我得到一个错误。 日食不识别关键词距离,并且对于校正错误,它给出提示箱子方法“距离”有4参数…如何修复它? 或其他一些方式做同样的工作??? 感谢致敬。 代码附在下面 @Override public void onLocationChanged(Location location) { double currentLat=location.getLatitude(); double currentLon=location.getLongitude(); if (distance(lat,lon,currentLat,currentLon)<2.0){ //do what you want to do… } }

最小的Android前台服务在高端手机上被杀死

我正在尝试创建一个允许用户记录路线(位置/ GPS)的应用程序。 为了确保即使屏幕关闭也记录了位置,我已经为位置记录创建了foreground service 。 我将位置存储在Room Database ,该Room Database使用Dagger2注入我的服务。 但是,这项服务被Android杀死,当然这并不好。 我可以订阅低内存警告,但这并没有解决我的服务在运行Android 8.0的现代高端手机上大约30分钟后被杀的根本问题 我创建了一个只有“Hello world”活动和服务的最小项目: https : //github.com/RandomStuffAndCode/AndroidForegroundService 该服务在我的Application类中启动,并且路由日志记录通过Binder启动: // Application @Override public void onCreate() { super.onCreate(); mComponent = DaggerAppComponent.builder() .appModule(new AppModule(this)) .build(); Intent startBackgroundIntent = new Intent(); startBackgroundIntent.setClass(this, LocationService.class); startService(startBackgroundIntent); } // Binding activity bindService(new Intent(this, LocationService.class), mConnection, Context.BIND_AUTO_CREATE | Context.BIND_IMPORTANT); // mConnection starts the […]

为什么我的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 。