我正在尝试使用 Google 的融合位置 API 获取我的位置。为此,我创建了两个类。一个是 MainActivity,第二个是 FusedLocationService,其中 MainActivity 是主类。但我得到的经度和纬度为 0.0。所以请帮助我。
这是我的 MainActivity 代码:-
public class MainActivity extends AppCompatActivity {
TextView tvLocation;
FusedLocationService fusedLocationService;
double latitude;
double longitude;
String locationResult = "";
Location location;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvLocation = (TextView) findViewById(R.id.tvLocation);
fusedLocationService = new FusedLocationService(this);
location = fusedLocationService.getLocation();
if (null != location) {
latitude = location.getLatitude();
longitude = location.getLongitude();
locationResult = "Latitude: " + latitude + "\n" +
"Longitude: " + longitude + "\n";
} else {
Timber.e("-error-%s", "Location Not Available!");
locationResult = "Location Not Available!";
}
Log.e("Lati ", String.valueOf(latitude));
Log.e("longi ", String.valueOf(longitude));
tvLocation.setText(locationResult);
}
}
这是我的 FusedLocationService 类:-
public class FusedLocationService implements LocationListener, GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener {
private static final long INTERVAL = 1000 * 30; //30sec
private static final long FASTEST_INTERVAL = 1000 * 5; // 5sec
Activity mActivity;
public LocationRequest locationRequest;
public GoogleApiClient googleApiClient;
public Location location;
public FusedLocationProviderApi fusedLocationProviderApi = LocationServices.FusedLocationApi;
public FusedLocationService(Activity activity) {
Timber.plant(new Timber.DebugTree());
locationRequest = LocationRequest.create();
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
locationRequest.setInterval(INTERVAL);
locationRequest.setFastestInterval(FASTEST_INTERVAL);
mActivity = activity;
googleApiClient = new GoogleApiClient.Builder(mActivity)
.addApi(LocationServices.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
if (googleApiClient != null) {
googleApiClient.connect();
}
}
@Override
public void onConnected(Bundle connectionHint) {
Log.e("-onConnected-", "connected now");
location = fusedLocationProviderApi.getLastLocation(googleApiClient);
fusedLocationProviderApi.requestLocationUpdates(googleApiClient, locationRequest, this);
}
@Override
public void onLocationChanged(Location location) {
}
public Location getLocation() {
return location;
}
@Override
public void onConnectionSuspended(int i) {
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
}
}
我已在 gradle 文件夹中的 list 和库中包含权限。 所以请帮助。提前谢谢你
最佳答案
缺少对新位置的引用:
@Override
public void onLocationChanged(Location location) {
this.location = location;
}
位置更新也是异步的。因此,您需要类似 Activity 的回调。
编辑:
同时检查 Google Play 服务是否可用。您可以创建这样的方法:
public boolean checkPlayServices() {
return GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(context) == ConnectionResult.SUCCESS;
}
关于android - 无法使用 Google 的融合位置 API 获取位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37072009/