我一直在嘗試使用Fused Location Api in andriod獲取位置(緯度/經度)。當wifi和gps都打開時,我的代碼工作正常。如果我關閉GPS,那麼我沒有得到任何位置更新。
我正在使用BALANCED_POWER_ACCURACY作爲位置請求。 我在清單中添加了Access_FINE_Location權限,並在我的build.gradle文件中使用了播放服務版本9.2.1。
我正在測試真實設備(Samsung SM0G360H API 19和Samsung SM-G361 API 21)。兩者都給出了相同的結果。
任何人都可以告訴我Fused Location Api的工作原理嗎?
如何在gps關閉但網絡連接打開時獲取位置更新?
我的代碼:
如何使用網絡在android中使用Fused Location Provider獲取位置?
public class LocationUpdateusingFused extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks,GoogleApiClient.OnConnectionFailedListener,LocationListener{
TextView txtOutputLat, txtOutputLon;
Location mLastLocation;
private GoogleApiClient mGoogleApiClient;
private LocationRequest mLocationRequest;
String lat, lon;
Intent batteryStatus;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fleet_layout);
txtOutputLat = (TextView) findViewById(R.id.textView);
txtOutputLon = (TextView) findViewById(R.id.textView2);
buildGoogleApiClient();
}
@Override
public void onConnected(@Nullable Bundle bundle) {
mLocationRequest = LocationRequest.create();
mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
mLocationRequest.setMaxWaitTime(5000);
mLocationRequest.setInterval(10000); // Update location every second
try {
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
mGoogleApiClient);
}
catch (SecurityException e)
{
Log.e("LocatonUpdate",e+" ");
}
if (mLastLocation != null) {
lat = String.valueOf(mLastLocation.getLatitude());
lon = String.valueOf(mLastLocation.getLongitude());
}
updateUI();
}
@Override
public void onConnectionSuspended(int i) {
}
@Override
public void onLocationChanged(Location location) {
lat = String.valueOf(location.getLatitude());
lon = String.valueOf(location.getLongitude());
Log.e("LocationChanged",location.getSpeed()+" "+location.getAccuracy()+" "+location.getBearing()+" "+location.getProvider()+" "+location.getAltitude()
);
updateUI();
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
buildGoogleApiClient();
}
@Override
protected void onStart() {
super.onStart();
mGoogleApiClient.connect();
}
@Override
protected void onDestroy() {
super.onDestroy();
mGoogleApiClient.disconnect();
}
void updateUI() {
txtOutputLat.setText(lat);
txtOutputLon.setText(lon);
}
synchronized void buildGoogleApiClient() {
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
}
}
您是否檢查位置設置? setInterval(10000)也是10秒。並不重要。 – masp
感謝提到的位置設置,但我想獲得位置更新只使用網絡即位置服務將關閉。我能夠使用普通的LocationService來完成這項工作,但融合提供商不能使用位置服務。你能給我關於這方面的任何信息嗎? – Alvi
您禁用了位置服務?爲什麼和哪些設置完全在您的21三星?如果您不希望應用程序使用gps,則可以更改權限並僅使用ACCESS_COARSE_LOCATION。您仍然可以使用PRIORITY_BALANCED_POWER_ACCURACY的融合提供者。首先,該算法檢查網絡提供商,然後如果可用,則使用gps。 – masp