내 앱에서 위치 기반 기능을 구현하고 싶습니다. 나는 조금 읽고 있었고, 나는 조금 혼란스러워했다.Google Play 서비스 또는 Android 위치 서비스
거의 모든 결과가 Android Location API를 사용하는 예와 함께 제공됩니다. 안드로이드 개발자 지침을 읽고
그러나 때 다음과 같은 주 :
구글 플레이 서비스 위치 API는에 위치 인식을 추가하는 방법으로 안드로이드 프레임 워크 위치 API를 (android.location)보다 선호하는 당신 앱. 현재 Android 프레임 워크 위치 API를 사용중인 경우 최대한 빨리 Google Play 서비스 위치 API로 전환하는 것이 좋습니다.
그래서이 단지 위치 수신기를 구현하는 간단한 경로에 대한 이동하지 말라고 말하고있다.
제 질문은이 둘의 차이점은 무엇입니까? 내가 왜 다른 것을 사용하지 않을까요?
어디에서 Google Play 서비스 위치 API에 안전하게 안전하게 액세스하는 방법에 대한 적절한 자습서를 찾을 수 있습니까?
나는 지금까지 (안드로이드 사이트에서 제안한대로) 이것을 시도했지만 아무 콜백도 호출되지 않았습니다.
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();
}
}
나는 다음 내 활동에서 내을 locationManager 전화 :
LocationManager locationManager = new LocationManager(this);
Location location = locationManager.getCoarseLocation();
//Use Location
나는 단순히 어떤 활동이나 조각에서 호출 할 수있는 도우미 클래스를 만들고 싶어. 그러나 다음을 실행하면 생성자가 성공적으로 실행됩니다. 그러나 콜백 내 중단 점 중 아무도 안타. 1 ~ 2 분 후에도 또한
mGoogleApiClient.connect()
를 귀하의 질문에 차이점에 대해 :
귀하의 코드로 판단 할 때 내가 기억하는 것처럼 Google 가이드를 따르지 않았습니다 ... 어디에서 requestLocationUpdates()를합니까? – shkschneider
기본적으로 구글 위치 API는 동일하고 구글을 제외한 안드로이드 것들은 다른 위치 콜백 (GPS, 네트워크, 와이파이)을 모두 처리하므로 위치를 알아 내면 걱정할 필요가 없습니다. – tyczj
@shkschneider 마지막으로 알려진 위치 : https://developer.android.com/training/location/retrieve-current.html Activity에 구현하지 않고 활동 참조를 클래스에 전달합니다. – Zapnologica