首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

LocationServices.FusedLocationApi.requestLocationUpdates从不调用onLocationChanged

LocationServices.FusedLocationApi.requestLocationUpdates是Google Play服务中的一个方法,用于请求获取设备的位置更新。该方法需要传入一个GoogleApiClient对象和一个LocationRequest对象作为参数。

当调用requestLocationUpdates方法后,系统会开始监听设备的位置变化,并在位置发生变化时调用注册的LocationListener对象的onLocationChanged方法。但是,如果在调用requestLocationUpdates方法后,没有调用onLocationChanged方法,可能是由于以下几个原因:

  1. 设备没有开启定位功能:在使用该方法前,需要确保设备已经开启了定位功能。可以通过检查设备的定位设置来确认是否已经开启。
  2. 权限问题:在AndroidManifest.xml文件中,需要添加相应的权限声明,以获取设备的位置信息。需要添加以下权限声明:
代码语言:xml
复制

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

代码语言:txt
复制

同时,还需要在代码中请求运行时权限,以获取定位权限:

代码语言:java
复制

if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

代码语言:txt
复制
   ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_LOCATION_PERMISSION);

}

代码语言:txt
复制
  1. Google Play服务未安装或版本过低:LocationServices.FusedLocationApi是Google Play服务提供的接口,需要确保设备上已经安装了最新版本的Google Play服务。可以通过在build.gradle文件中添加以下依赖来引入Google Play服务:
代码语言:groovy
复制

implementation 'com.google.android.gms:play-services-location:17.1.0'

代码语言:txt
复制

并在代码中检查Google Play服务的可用性:

代码语言:java
复制

GoogleApiAvailability googleApiAvailability = GoogleApiAvailability.getInstance();

int resultCode = googleApiAvailability.isGooglePlayServicesAvailable(this);

if (resultCode != ConnectionResult.SUCCESS) {

代码语言:txt
复制
   if (googleApiAvailability.isUserResolvableError(resultCode)) {
代码语言:txt
复制
       googleApiAvailability.getErrorDialog(this, resultCode, REQUEST_GOOGLE_PLAY_SERVICES).show();
代码语言:txt
复制
   } else {
代码语言:txt
复制
       // 不支持Google Play服务,处理相应逻辑
代码语言:txt
复制
   }

}

代码语言:txt
复制

综上所述,如果调用LocationServices.FusedLocationApi.requestLocationUpdates方法后没有调用onLocationChanged方法,可能是由于设备未开启定位功能、权限问题或Google Play服务未安装或版本过低等原因导致。需要逐一排查这些问题,并进行相应的处理。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android获取位置信息的方法

;// 获取的是位置服务 LocationManager locationManager = (LocationManager) getSystemService(serviceString);// 调用...private final LocationListener locationListener = new LocationListener() { @Override public void onLocationChanged...arg2) { // TODO Auto-generated method stub } }; 接下来对上面实现LocationListener的代码下的四个方法进行简单介绍: onLocationChanged...()这个方法在位置改变时被调用,onProviderDisabled()这个方法在用户禁用具有定位功能的硬件时被调用,onProviderEnabled()这个方法在用户启用具有定位功能的硬件时被调用,...onStatusChanged()这个方法在定位功能硬件状态改变时被调用,例如,从不可获取位置信息状态到可以获取位置信息的状态,反之亦然 。

4.7K30

Android8.0适配前台定位服务service的示例代码

查了几篇博客说前台服务需要在service的onStartCommand方法中调用startForeground(int, Notification)才能开启前台服务。...但是onStartCommand需要走startservice()的生命周期才会调用。 我改用了bindservice() 正好需要activity和service交互,当然两个启动方法混用也可以。...适配8.0的通知构建需要适配,不然会导致你的通知无法显示(第一次调用的时候还以为是一加拦截了通知) 3、那么这时候应该已经实现了前台服务,需要把服务获得的位置信息传递给activity。...provider) { Logger.e(TAG, "LocationListener " + provider); } @Override public void onLocationChanged...(Location location) { Log.i("location", "onLocationChanged: " + "当前坐标:" + location.getLatitude(

1.2K20

手机卫士手机定位的原理

在空旷的地方准确 手机使用A-GPS需要网络来辅助定位,定位速度快,网络记录了上次的卫星轨道, 获取LocationManager对象,通过getSystemService(LOCATION_SERVICE) 调用...),LocationListener对象 LocationListener是一个接口,需要做它的实现类 定义MyLocationListener实现LocationListener,实现它下面的方法 onLocationChanged...(),当位置改变的时候回调,传递进来一个Location对象 调用location对象的getLongitude()方法,得到经度 调用Location对象的getLatitude()方法,得到维度 调用...onProviderEnabled(),当某一个位置提供者可用了 onProviderDisabled(),当某一个位置提供者不可用了 当activity销毁的时候,取消监听位置 重写activity的onDestroy()方法 调用...private class MyLocationListener implements LocationListener{ @Override public void onLocationChanged

1.6K20

Android系统服务(SystemService)简介

当系统定位到系统的位置后,就会回调监听器的onLocationChanged(),将位置信息通知给监听器。...@Override public void onLocationChanged(Location location) { ... } } 原来是ILocationListener.Stub...location/java/android/location/ILocationListener.aidl oneway interface ILocationListener { void onLocationChanged...(in Location location); ... } 而在LocationManagerService里只要调用ILocationListener的方法就可以将消息传递给应用层的监听: mListener.onLocationChanged...另一种是调用端不需要等待服务端返回结果,调用完成后直接返回void,这样服务端发生阻塞不会影响到应用端,这样的单向的接口在AIDL里定义时需要添加oneway关键字,如: oneway void statusBarVisibilityChanged

1.7K00

使用Xposed进行微信小程序API的hook

定位到具体的类以后,我们可以用Objection来hook整个类来观察这个类中函数的调用情况,以此发现主要的函数。...结合动态测试的函数调用结果,随便浏览一下被调用的函数的代码,看到了一个主要函数代码如下: @Override // com.tencent.mm.plugin.appbrand.jsapi.m.a public...public static final int STATUS_UNKNOWN = -1; public static final String WIFI = "wifi"; void onLocationChanged...arg3); void onStatusUpdate(String arg1, int arg2, String arg3); } TencentLocationListener的回调函数onLocationChanged...思路就是先hook requestSingleFreshLocation,在调用之前通过getClass()获取其第二参数的对象类型,然后hook这个类的onLocationChanged函数,同样在其调用之前得到其第一参数的对象类型

6K20

Android平台GPS系统的应用开发

2、性能 (1)由于项目调用android camera api,所以需要在androidmanifest.xml中写入开启调用camera api权限的代码,否则项目会因权限不够而无法运行调用camera...api的代码 (2)项目调用 camera 后显现的取景,受真实手机的摄像头像素数等指标的影响,因此不同的手机运行本项目后取景图像可能质量不一样。...接口,使其能够监听定位信息的改变: class MyGPSActivity extends MapActivity implements LocationListener { public void onLocationChanged...方法就会在用户的位置发生500米距离的改变之后进行调用。...以下代码是onLocationChanged方法的参考实现: public void onLocationChanged(Location location) {    if (location !

4.3K40

Flutter 中获取地理位置

``serviceEnabled() 对于后者,我们显示了一个原生提示,允许用户通过调用快速启用位置,然后我们再检查一次,如果他们从提示中启用了它。...requestService() 一旦我们确定启用了位置服务,下一步就是通过调用它来检查我们的应用程序是否具有使用它的必要权限,这将返回.hasPermission()``PermissionStatus...在这种情况下不会显示对话框requestPermission() 如果状态为 ,我们可以通过调用显示请求位置权限的系统提示。.../ timestamp of the LocationData final bool isMock; // Is the location currently mocked } 您还可以通过添加onLocationChanged...侦听器在用户位置发生变化时监听位置更新来获得连续回调,这是出租车应用程序、司机/骑手应用程序等的一个很好的用例: location.onLocationChanged.listen((LocationData

3.2K10

Android调用高德地图定位的方法

将地图移动到定位位置 aMap.moveCamera(CameraUpdateFactory.changeLatLng(new LatLng(lat,lgt))); mListener.onLocationChanged...aMapLocationClient.setLocationOption(clientOption); aMapLocationClient.startLocation(); } //完成定位回调 @Override public void onLocationChanged...setLocationCallBack(ILocationCallBack callBack){ this.callBack = callBack; } } 错误情况检查: Key是否配置错误 在onCreate中调用...; mapView.onPause()、mapView.onDestroy()、mapView.onResume()、mapView.onSaveInstanceState(outState)是否都已调用且不写错...aMap.setMyLocationEnabled(true)设置显示定位层并可触发 手机是否开启定位 好了,调用地图的基本功能完成,更高级的功能还包括Poi检索,附近搜索,路线规划,后续会继续完善该功能

2.5K20
领券