我希望在我的应用程序中实现基于位置的功能。我已经阅读了一些内容,但感到有些困惑。
当我搜索教程时,几乎每个结果都使用Android Location API作为示例。
然而,在阅读Android开发者指南时,他们声明如下:
“Google Play服务位置API比Android框架位置API(android.location)更受欢迎,作为向您的应用程序添加位置感知的方法。如果您目前正在使用Android框架位置API,则强烈建议您尽快切换到Google Play服务位置API。” Android Docs 这告诉我不要选择简单的实现位置监听器的路线。
因此,我的问题是,两者之间有什么区别?我为什么要使用其中一个而不是另一个?
在哪里可以找到一个合适的教程,以安全准确地访问Google Play服务位置API?
我已经尝试了这个(根据Android网站上的建议),但我的回调没有被调用。
我然后从我的Activity中调用我的LocationManager:
当我搜索教程时,几乎每个结果都使用Android Location API作为示例。
然而,在阅读Android开发者指南时,他们声明如下:
“Google Play服务位置API比Android框架位置API(android.location)更受欢迎,作为向您的应用程序添加位置感知的方法。如果您目前正在使用Android框架位置API,则强烈建议您尽快切换到Google Play服务位置API。” Android Docs 这告诉我不要选择简单的实现位置监听器的路线。
因此,我的问题是,两者之间有什么区别?我为什么要使用其中一个而不是另一个?
在哪里可以找到一个合适的教程,以安全准确地访问Google Play服务位置API?
我已经尝试了这个(根据Android网站上的建议),但我的回调没有被调用。
public class LocationManager implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {
private Context mContext;
private GoogleApiClient mGoogleApiClient;
private Location mLastLocation;
public LocationManager(Context context) {
mContext = context;
//
if (checkIfGooglePlayServicesAreAvailable()) {
//Get Access to the google service api
buildGoogleApiClient();
} else {
//Use Android Location Services
//TODO:
}
}
public Location getCoarseLocation() {
if (mLastLocation != null) {
return mLastLocation;
} else return null;
}
private synchronized void buildGoogleApiClient() {
mGoogleApiClient = new GoogleApiClient.Builder(mContext)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
}
private boolean checkIfGooglePlayServicesAreAvailable() {
int errorCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(mContext);
if (errorCode != ConnectionResult.SUCCESS) {
GooglePlayServicesUtil.getErrorDialog(errorCode, (MainActivity) mContext, 0).show();
return false;
}
return true;
}
@Override
public void onConnected(Bundle bundle) {
Location location = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
if (location != null) {
mLastLocation = location;
Toast.makeText(mContext, location.getLongitude() + " , " + location.getLatitude() + " : " + location.getAccuracy(), Toast.LENGTH_LONG).show();
}
}
@Override
public void onConnectionSuspended(int i) {
Toast.makeText(mContext, "suspended", Toast.LENGTH_LONG).show();
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
Toast.makeText(mContext, connectionResult.toString(), Toast.LENGTH_LONG).show();
}
}
我然后从我的Activity中调用我的LocationManager:
LocationManager locationManager = new LocationManager(this);
Location location = locationManager.getCoarseLocation();
//Use Location
我想创建一个帮助类,可以在任何活动或片段中简单调用。然而,当我运行以下代码时,构造函数成功执行。但是回调函数中的断点都没有被触发,甚至等待1或2分钟后也是如此。
requestLocationUpdates()
函数? - shkschneider