本文介绍了如何在Android应用中使用Google API获取当前的GPS位置(纬度 - 经度)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 29岁程序员,3月因学历无情被辞! 我想使用Google API获取GPS位置。 我的代码: .addConnectionFailedListener(this) .addApi(LocationServices.API) .build($)code> mGoogleApiClient = ); locationManager =(LocationManager)getSystemService(Context.LOCATION_SERVICE); @Override public void onConnected(Bundle bundle){ mLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); double lat = mLocation.getLatitude(); double lon = mLocation.getLongitude(); 我没有在 lat 和 lon 变量。 我该如何解决它?解决方案 不需要 LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); 总是会返回last目的。如果它没有找到最后一个对象,它将返回null,你将无法获得位置。在这种情况下,建议使用以下方式请求定位: LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest , 这个); 您还需要实施一些界面并覆盖方法以通过Google API获取位置信息。 按照下面的步骤获取位置: 首先,把它放在gradle文件中 compile'c​​om.google.android.gms:play-services:8.4.0' 然后实现必要的接口 public class MainActivity extends BaseActivitiy implements GoogleApiClient.ConnectionCallbacks ,GoogleApiClient.OnConnectionFailedListener,com.google.android.gms.location.LocationListener 声明实例 private GoogleApiClient mGoogleApiClient; 私人位置mLocation; 私人LocationManager locationManager; private LocationRequest mLocationRequest; 把它放在 onCreate() p> mGoogleApiClient = new GoogleApiClient.Builder(this) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .addApi(LocationServices.API) .build(); locationManager =(LocationManager)getSystemService(Context.LOCATION_SERVICE); 最后,覆盖必要的方法 // TODO:考虑调用 // ActivityCompat#requestPermissions //在这里请求缺少的权限,然后重写 // public void onRequestPermissionsResult(int requestCode,String [] permissions, // int [] grantResults) //处理用户授予权限的情况。有关更多详细信息,请参阅文档 //获取ActivityCompat#requestPermissions。 return; } mLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); if(mLocation == null){ startLocationUpdates(); } if(mLocation!= null){ double latitude = mLocation.getLatitude(); double longitude = mLocation.getLongitude(); } else { // Toast.makeText(this,Location not Detected,Toast.LENGTH_SHORT).show(); 保护void startLocationUpdates(){ //创建位置请求 mLocationRequest = LocationRequest.create()。 setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY) .setInterval(UPDATE_INTERVAL) .setFastestInterval(FASTEST_INTERVAL); //请求位置更新 if(ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED&&& ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS_COARSE_LOCATION)!= PackageManager.PERMISSION_GRANTED){ // TODO:考虑调用 // ActivityCompat#requestPermissions //在这里请求丢失的权限,然后覆盖 // public void onRequestPermissionsResult( int requestCode,String []权限, // int [] grantResults) //处理用户授予权限的情况。有关更多详细信息,请参阅文档 //获取ActivityCompat#requestPermissions。 return; } LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest,this); Log.d(reque,--->>>>); @Override public void onConnectionSuspended(int i){ Log.i(TAG,Connection Suspended); mGoogleApiClient.connect(); $ b @Override public void onConnectionFailed(ConnectionResult connectionResult){ Log.i(TAG,Connection failed。Error:+ connectionResult.getErrorCode() ); } @Override public void onStart(){ super.onStart(); mGoogleApiClient.connect(); } @Override public void onStop(){ super.onStop(); if(mGoogleApiClient.isConnected()){ mGoogleApiClient.disconnect(); @Override public void onLocationChanged(Location location){ } I want to get GPS location using Google API.My code: mGoogleApiClient = new GoogleApiClient.Builder(this) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .addApi(LocationServices.API) .build();locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);@Overridepublic void onConnected(Bundle bundle) { mLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); double lat = mLocation.getLatitude(); double lon = mLocation.getLongitude();}I am not getting anything in the lat and lon variables.How do I solve it? 解决方案 It doesn't necessary that LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); will always return last object. If it doesn't find last object, it will return null and you will not get location. In such case, it is recommended to request for location using :LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);You also need to implement some interfaces and override method to get location by Google API.Follow this steps to get location:First of all, put this in gradle filecompile 'com.google.android.gms:play-services:8.4.0'then implement necessary interfacespublic class MainActivity extends BaseActivitiy implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, com.google.android.gms.location.LocationListenerdeclare instancesprivate GoogleApiClient mGoogleApiClient; private Location mLocation; private LocationManager locationManager; private LocationRequest mLocationRequest;put this in onCreate() mGoogleApiClient = new GoogleApiClient.Builder(this) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .addApi(LocationServices.API) .build(); locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);At last, override necessary methods@Override public void onConnected(Bundle bundle) { if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { // TODO: Consider calling // ActivityCompat#requestPermissions // here to request the missing permissions, and then overriding // public void onRequestPermissionsResult(int requestCode, String[] permissions, // int[] grantResults) // to handle the case where the user grants the permission. See the documentation // for ActivityCompat#requestPermissions for more details. return; } mLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); if(mLocation == null){ startLocationUpdates(); } if (mLocation != null) { double latitude = mLocation.getLatitude(); double longitude = mLocation.getLongitude(); } else { // Toast.makeText(this, "Location not Detected", Toast.LENGTH_SHORT).show(); } } protected void startLocationUpdates() { // Create the location request mLocationRequest = LocationRequest.create() .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY) .setInterval(UPDATE_INTERVAL) .setFastestInterval(FASTEST_INTERVAL); // Request location updates if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { // TODO: Consider calling // ActivityCompat#requestPermissions // here to request the missing permissions, and then overriding // public void onRequestPermissionsResult(int requestCode, String[] permissions, // int[] grantResults) // to handle the case where the user grants the permission. See the documentation // for ActivityCompat#requestPermissions for more details. return; } LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this); Log.d("reque", "--->>>>"); } @Override public void onConnectionSuspended(int i) { Log.i(TAG, "Connection Suspended"); mGoogleApiClient.connect(); } @Override public void onConnectionFailed(ConnectionResult connectionResult) { Log.i(TAG, "Connection failed. Error: " + connectionResult.getErrorCode()); } @Override public void onStart() { super.onStart(); mGoogleApiClient.connect(); } @Override public void onStop() { super.onStop(); if (mGoogleApiClient.isConnected()) { mGoogleApiClient.disconnect(); } } @Override public void onLocationChanged(Location location) { } 这篇关于如何在Android应用中使用Google API获取当前的GPS位置(纬度 - 经度)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 上岸,阿里云!
08-24 18:15
查看更多