Java 使用谷歌Play服务和Wifi/数据网络的Android GPS定位
我们实际上正在开发一个应用程序,我们需要在其中确定我们当前的移动位置 阅读文档后,Google Play服务似乎是处理此问题的更好方法,而不是使用旧的LocationManager 问题 即使我们在清单中指定了不同的访问权限,我们也不可能通过WIFI或网络数据获取位置。事实上,最后一个已知的位置总是空的 另一方面,如果我们激活GPS,最后一个位置就是好位置 代码 清单包含: 活动: 我们是否在这段代码中遗漏了从各个方面管理当前职位的内容Java 使用谷歌Play服务和Wifi/数据网络的Android GPS定位,java,android,gps,google-play-services,Java,Android,Gps,Google Play Services,我们实际上正在开发一个应用程序,我们需要在其中确定我们当前的移动位置 阅读文档后,Google Play服务似乎是处理此问题的更好方法,而不是使用旧的LocationManager 问题 即使我们在清单中指定了不同的访问权限,我们也不可能通过WIFI或网络数据获取位置。事实上,最后一个已知的位置总是空的 另一方面,如果我们激活GPS,最后一个位置就是好位置 代码 清单包含: 活动: 我们是否在这段代码中遗漏了从各个方面管理当前职位的内容 感谢您的帮助检查设置->位置->开/关我们是否遗漏了什么?
感谢您的帮助检查设置->位置->开/关我们是否遗漏了什么?是的,FusedLocationApi.getLastLocation的文档部分提到它可以返回null。。。事实上,它很少*返回null。当GPS激活时,它不会返回空值。它只返回空值,每次使用Wifi或移动数据时,您是否有互联网?
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.NFC" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<!--
The following two permissions are not required to use
Google Maps Android API v2, but are recommended.
-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
public class GoogleLocationService implements
GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {
private GoogleApiClient mGoogleApiClient;
private Activity mActivity;
private Location mLastLocation;
private boolean mResolvingError;
public GoogleLocationService(Activity mActivity) {
this.mActivity = mActivity;
this.mResolvingError = false;
}
public synchronized void buildGoogleApiClient() {
mGoogleApiClient = new GoogleApiClient.Builder(mActivity)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
}
@Override
public void onConnected(Bundle connectionHint) {
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
mGoogleApiClient);
Log.e("mLastLocation", mLastLocation + "");
if (mLastLocation != null) {
Log.e("lat/lng", mLastLocation.getLatitude() + " " + mLastLocation.getLongitude() + "");
}
}
@Override
public void onConnectionSuspended(int i) {
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
if (mResolvingError) {
// Already attempting to resolve an error.
return;
} else if (connectionResult.hasResolution()) {
try {
mResolvingError = true;
connectionResult.startResolutionForResult(mActivity, 1001);
} catch (IntentSender.SendIntentException e) {
// There was an error with the resolution intent. Try again.
mGoogleApiClient.connect();
}
} else {
// Show dialog using GooglePlayServicesUtil.getErrorDialog()
Log.e("GoogleLocationService", connectionResult.getErrorCode() + "");
mResolvingError = true;
}
}
public boolean ismResolvingError() {
return mResolvingError;
}
public void setmResolvingError(boolean mResolvingError) {
this.mResolvingError = mResolvingError;
}
public GoogleApiClient getmGoogleApiClient() {
return mGoogleApiClient;
}
public void setmGoogleApiClient(GoogleApiClient mGoogleApiClient) {
this.mGoogleApiClient = mGoogleApiClient;
}
public Location getmLastLocation() {
return mLastLocation;
}
public void setmLastLocation(Location mLastLocation) {
this.mLastLocation = mLastLocation;
}
}
@Override
protected void onStart() {
super.onStart();
if (!mServiceGoogle.ismResolvingError()) { // more about this later
mServiceGoogle.getmGoogleApiClient().connect();
}
}
@Override
protected void onStop() {
mServiceGoogle.getmGoogleApiClient().disconnect();
super.onStop();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_position);
mServiceGoogle = new GoogleLocationService(this);
mServiceGoogle.buildGoogleApiClient();
}