Fusion Location Provider API声称,位置更新无法在室内工作

tal*_*ila 10 api android location location-provider

问题:

Fusion Location Provider API声称,位置更新无法在室内工作.

发生了什么:

  1. 我尝试LocationClient在我的Android应用中使用最新的位置API来获取位置更新.
  2. 在我测试室外时,我的Android应用程序可以解决任何问题.
  3. 但是在室内(任何建筑物内)进行测试时,不会发生任何位置更新.

预期行为:

根据新的API,当我在室内时,我期望在建筑物周围获得一些估计的位置(因为GPS没有找到卫星信号以获得准确的位置).

我看到最新的谷歌地图Android应用程序在室内工作得很好,估计位置.

题:

我还需要注意使用新的位置API来在室内更新位置(不需要准确的位置,低精度也很好).

我正在使用Android 4.2.2版API实现Android App.我在HTC One X上测试(OS v 4.1.1)

下面是我用于使用新API获取位置更新的android代码:

步骤1:

mLocationClient = new LocationClient(this, this, this);
Run Code Online (Sandbox Code Playgroud)

第2步:

// Create the LocationRequest object
mLocationRequest = LocationRequest.create();
// Use high accuracy
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
// Set the update interval to 5 seconds
mLocationRequest.setInterval(UPDATE_INTERVAL);
// Set the fastest update interval to 1 second
mLocationRequest.setFastestInterval(FASTEST_INTERVAL);
Run Code Online (Sandbox Code Playgroud)

Step3:inside onStart()方法 - 添加以下行:

// Connect the client.
mLocationClient.connect();
Run Code Online (Sandbox Code Playgroud)

Step4:inside onConnected()方法 - 添加以下行:

mLocationClient.requestLocationUpdates(mLocationRequest, this);
Run Code Online (Sandbox Code Playgroud)

Step5:内部onLocationChanged()方法 - 侦听位置更新.在测试内部时不调用此方法.只有在找到GPS信号时才会调用此方法.

double lat = location.getLatitude();
double lng = location.getLongitude();
Run Code Online (Sandbox Code Playgroud)

最后在Android Manifest中添加了以下权限:

 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Run Code Online (Sandbox Code Playgroud)

tal*_*ila 0

在 HTC One X (4.1.1) 上进行长时间测试和调试后,我决定在任何其他手机型号上尝试相同的测试用例。幸运的是,当我用我朋友的三星 S3 (4.1.1) 进行测试时,我的应用程序也可以在室内运行。在同一时间和地点,当我使用 HTC One X 进行测试时,我无法在室内获得位置信息。两部手机的设置相同(WiFi/GPS/移动网络均启用)。

为了确认这是特定设备的问题,我使用我的应用程序在建筑物内的不同角落进行了多次测试,我在所有室内位置的 HTC 上都看到了同样的问题(但在相同的位置,S3 获取了室内位置)。