我在检索用户在应用程序中的位置时遇到了问题。我使用了官方文档中建议的代码,也就是我使用的
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
mGoogleApiClient);
获取最后的已知位置。 出于某种原因,getLastLocation在每次执行时都返回null。我确实在清单中添加了ACCESS_FINE_LOCATION权限。 其他人似乎有同样的问题,但我无法得到一个明确的解决方案。 我认为没有理由不这样做。 可能是因为我使用模拟器来测试应用程序? 如果没有,有没有替代方案?
答案 0 :(得分:1)
我几天前已经实施了Google Location api,并且工作正常。 由于您没有显示任何代码,我会告诉您如何设置我的应用程序以使用api,希望这对您有帮助。
我正在使用android studio。在我的项目的gradle 中,我添加了以下依赖项:
classpath 'com.google.gms:google-services:1.5.0-beta2'
(每次更新Google Play服务时,请务必更新此版本号。)
在我的模块的gradle 中,我添加了以下依赖项:
compile 'com.google.android.gms:play-services-location:8.4.0'
(每次更新Google Play服务时,请务必更新此版本号。)
<强>的manifest.xml 强>
<manifest
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
...
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="@string/android_api_key"/>
<uses-feature
android:glEsVersion="0x00020000"
android:required="true"/>
<activity
...
<强>的strings.xml 强> 您需要一个来自google developers console
的android api密钥(请参阅清单中的第二个元数据标记) <string name="android_api_key">putyourapikeyhere</string>
活动或片段
public class MainActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks,GoogleApiClient.OnConnectionFailedListener{
private GoogleApiClient mGoogleApiClient;
private LocationRequest mLocationRequest;
在活动的onCreate中构建您的GoogleApiClient:
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(LocationServices.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
mGoogleApiClient.connect();
如果您在片段中使用它,请在其中创建onCreate:
mGoogleApiClient = new GoogleApiClient.Builder(getContext())
.addApi(LocationServices.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
mGoogleApiClient.connect();
区别在于GoogleApiClient.Builder的输入参数。
接下来,你必须实现回调
@Override
public void onConnected(Bundle bundle) {
mLocationRequest = LocationRequest.create();
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
lat = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient).getLatitude();
lng = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient).getLongitude();
}
@Override
public void onConnectionSuspended(int i) {
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
}