android - 无法使用 Google 的融合位置 API 获取位置

标签 android google-api location latitude-longitude

我正在尝试使用 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;
}

参见 Google documentation

关于android - 无法使用 Google 的融合位置 API 获取位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37072009/

相关文章:

android - 无法解析符号 RoomDatabase

python - 如何使用 Python 从 Google Translate API 访问 JSON 翻译

php - PHP 和 mysql 中的 Epoch & Unix 时间戳转换工作不正常

ios7 - 自定义 iOS 模拟器预设位置以伪装为当前位置

ios - 面对新的iOS室内定位能力

javascript - AngularJS 如何重新加载然后重定向到另一个 View ?

database - 访问远程数据库,android

android JNI报告找不到方法

objective-c - YouTube API v3示例项目引发GTLJSONRPCErrorDomain -32602未经授权的错误

java - 将 ScrollView 中的所有内容转换为位图?