我正在开发一个需要知道位置感知的应用(<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="19" />
)。它在我的设备上运行正常(运行Android 4.4.2),但我在使用GT-S5830(运行Android 2.2.1)时遇到问题。
我同时使用android.location.LocationManager
和com.google.android.gms.location.LocationClient
。两者在4.4.2上工作正常(位置由NETWORK,GPS和FUSED提供商提供),但在2.2.1 LocationManager
从不调用onLocationChanged(...)
和LocationClient
无法使用,因为检查GooglePlayServicesUtil.isGooglePlayServicesAvailable(this) == ConnectionResult.SUCCESS
返回false。
无论如何,GT-S5830包含了Google Map应用程序,并且能够正确检索当前位置。
关于我做错了什么的想法?
Update1:我构建了一个新应用,仅检查GooglePlayServices是否可用,以防检索当前位置。 GooglePlayServices实际上可用,并且获取当前位置。现在的问题是:完全相同的方法如何在不同的应用程序上返回两个不同的结果?也许是因为争论?我总是传递this
参数:
1)当我没有得到 ConnectionResult.SUCCESS我传递public class BaseActionBarActivity extends ActionBarActivity implements GooglePlayServicesClient.ConnectionCallbacks, GooglePlayServicesClient.OnConnectionFailedListener {
的实例
2)当我获取时ConnectionResult.SUCCESS我传递了public class MainActivity extends Activity implements GooglePlayServicesClient.ConnectionCallbacks, GooglePlayServicesClient.OnConnectionFailedListener {
的实例
正在进行更多更新。
Update2:问题似乎与清单中的<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
标记或导入的google-play-services_lib有关。
我刚刚在一台新PC上导入了该项目,如果标签<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
不存在则会编译(这种方式无法在我的其他PC上编译)并且该应用程序在我正在使用的设备上正常工作问题(如果我留下该标记并使用随机值,它也会起作用,例如<meta-data android:name="com.google.android.gms.version" android:value="1" />
)。
答案 0 :(得分:0)
您可以检查googlePlayServicesUtil是否可用,如下所示:
int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
Log.e("PLAY SERVE", "status:" + status);
try {
if (status != ConnectionResult.SUCCESS) {
GooglePlayServicesUtil.getErrorDialog(status, this, 1).show();
} else {
//good to go
}