gpt4 book ai didi

android - 使用 GoogleApiClient + LocationServices 不更新

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:47:05 26 4
gpt4 key购买 nike

我只是想做一个简单的“教程”应用程序来获取我手机的位置(以了解稍后如何在其他应用程序中使用它),但我就是一无所获。

我做了什么

  1. Android 开发人员教程: 首先,我遵循了 Android 开发人员网站 (developer.android.com/training/location/receive-location-updates.html) 中的教程。

    就像那里指出的那样,我使用了 Location、LocationClient 和 LocationRequest,在 onCreate 中初始化(并设置它们)。 LocationClient在onStart和onStop中连接和断开。

    我在连接后请求位置更新(在 onConnected 中)。我在进行此调用之前确认 GooglePlayServices 可用,但我仍然没有在“onLocationChanged”中收到任何更新。

  2. GoogleApiClient:我注意到 LocationClient 已被弃用,而 LocationServices 是首选 (developer.android.com/reference/com/google/android/gms/location/LocationClient.html)。

    如此处所示:https://developer.android.com/reference/com/google/android/gms/location/FusedLocationProviderApi.html ,我使用 GoogleApiClient 并将其设置为 LocationServices (也是 https://stackoverflow.com/a/25013850/3802589 )。因此,我将其全部设置为使用它,但我仍然没有获得有关该位置的任何更新。

onLocationChanged 如果有响应,它应该打印出来。我还放置了一个打印位置或“无”的按钮。

备注

我使用 Google map 进行了检查,看看是否有问题,但一切正常。

项目

构建.gradle

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.google.android.gms:play-services:5.0.77'
compile "com.android.support:support-v4:20.0.+"
}

list

...
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
...
<meta-data android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
...

代码

public class MyActivity extends Activity  implements
GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener,
LocationListener {

private GoogleApiClient mLocationClient;
private Location mCurrentLocation;
LocationRequest mLocationRequest;

...
/* Constant fields - request interval */
...

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);

mLocationClient = new GoogleApiClient.Builder(getApplicationContext())
.addApi(LocationServices.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();

mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(UPDATE_INTERVAL);
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

mLocationRequest.setFastestInterval(FASTEST_INTERVAL);

}

@Override
protected void onStart() {
super.onStart();
mLocationClient.connect();
}

@Override
protected void onStop() {
super.onStop();

LocationServices.FusedLocationApi.removeLocationUpdates(mLocationClient, this);

mLocationClient.disconnect();
}

public void onClick(View view) {

if (mCurrentLocation != null) {
Log.i("Location", mCurrentLocation.toString());
} else {
Log.i("Location", "nothing");
}

}

@Override
public void onLocationChanged(Location location) {
Log.d("Location Update", "CHANGED");
mCurrentLocation = location;
}

@Override
public void onConnected(Bundle bundle) {
// Display the connection status
Toast.makeText(this, "Connected", Toast.LENGTH_SHORT).show();
if(servicesConnected()) {
LocationServices.FusedLocationApi.requestLocationUpdates(mLocationClient, mLocationRequest, this);
}
}

@Override
public void onConnectionSuspended(int i) {
Toast.makeText(this, "Disconnected. Please re-connect.",
Toast.LENGTH_SHORT).show();
}

日志

8948-8948/example.android.com.test D/Location Updates﹕ Google Play services is available.
8948-8948/example.android.com.test I/Location﹕ nothing

我觉得我可能忘记了一些非常简单的东西......但我就是看不到它而且我花了太多时间试图获得一个简单的位置......

我也许可以只使用 android.location API,但是......让我困扰的是这太难了(应该更容易)。

最佳答案

错误只是 wifi 没有打开......我没有意识到。

至于 GregM 所说的,如果我是正确的那是旧 API(其中大部分现在已弃用)并且如开发者网站 (https://developer.android.com/google/auth/api-client.html) 中所述,您必须使用 GoogleApiClient,如我的原始问题所示(对于回调也是如此)。

关于android - 使用 GoogleApiClient + LocationServices 不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25047910/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com