Location updates not working indoors as claimed by Fusion Location Provider APIs

对着背影说爱祢 提交于 2019-12-20 09:41:44

问题


Issue:

Location updates not working indoors as claimed by Fusion Location Provider APIs.

What happened:

  1. I tried implementing the latest location API to get location updates using LocationClient in my Android App.
  2. My android app works fine with out any issue while I am testing outdoor.
  3. But when testing indoors (inside any building), then no location updates are happening.

Expected behavior:

As per the new APIs, I am expecting to get some estimated location around the building while I am indoors (as GPS do not find the satellite signal for accurate location).

I see that latest Google Maps android app works fine indoors with estimated location.

Question:

What else do I have to take care using new location APIs to get the location update indoors (accurate location is not required, low accuracy is also fine).

I am implementing the Android App using Android 4.2.2 version APIs. I am testing on HTC One X (OS v 4.1.1)

Below is the android code that I applied to get location updates using new APIs:

Step1:

mLocationClient = new LocationClient(this, this, this);

Step2:

// 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);

Step3: inside onStart() method - below line is added:

// Connect the client.
mLocationClient.connect();

Step4: inside onConnected() method - below line is added:

mLocationClient.requestLocationUpdates(mLocationRequest, this);

Step5: inside onLocationChanged() method - listening for location updates. This method is not called when testing insides. This method is getting called only when GPS signal is found.

double lat = location.getLatitude();
double lng = location.getLongitude();

Finally added below permissions in Android Manifest:

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

回答1:


Based on your snippets your code looks fine to me for receiving indoor locations.

Try doing a dump while your app is requesting locations and you are indoors (expecting to receive locations but not): adb shell dumpsys activity service com.google.android.location.internal.GoogleLocationManagerService

Can you post the output here?

Can you double check that Settings->WiFi is enabled, and that Settings->Location access->Wi-Fi & mobile network location is enabled (both are required for indoor location).

Does your phone have a sim card? This would allow cell tower derived locations when wifi isn't available.

Finally you said that Google Maps gives you a location indoors in the same building. What is the approximate size of the accuracy circle (i.e. is it closer to 20 meters or 100 meters)?




回答2:


tinku! I've got the same issue with my Galaxy Nexus and Fusion Location Provider APIs.
My decision is setting priority for LocationRequest object to LocationRequest.PRIORITY_LOW_POWER

 mLocationRequest = LocationRequest.create();

 mLocationRequest.setPriority(LocationRequest.PRIORITY_LOW_POWER);

 mLocationRequest.setInterval(UPDATE_INTERVAL);
 mLocationRequest.setFastestInterval(FASTEST_INTERVAL);
 mLocationClient = new LocationClient(this, this, this);


For me it works fine indoors (low accuracy) and outdoors (high accuracy). Hope it will help you.




回答3:


Are you certain that you're not disconnecting the client? Once you disconnect the LocationClient, the current location update request disappears.

The code snippets by themselves are not a complete app. The sample app, however, is a complete working app. The purpose of the snippets is to show you the key steps, from which you can cut and paste. The sample app provides more material.




回答4:


After long testing and debugging on HTC One X (4.1.1), I decided to try same test cases on any other phone model. Luckily my app worked indoors too when testing with my friend's Samsung S3 (4.1.1). At same time and location, when I tested with my HTC One X, I do not get location indoors. Both phones are set with same settings (WiFi/GPS/Mobile network all enabled).

To confirm this is an issue with specific device, I performed many tests inside the building at different corners using my app and I see the same issue on my HTC at all indoor locations (but at same locations S3 gets the indoor location).



来源:https://stackoverflow.com/questions/16801843/location-updates-not-working-indoors-as-claimed-by-fusion-location-provider-apis

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!