Enviroment
- android:minSdkVersion="14"
- android:targetSdkVersion="19"
- com.google.android.gms:play-services:6.5.+
- android studio
In my project, I changed play-services version6.1. to play-services 6.5.+.
But, Building Errors occurred.
Unfortunately, LocationClient came to deprecated class. Instead, GoogleApiClient class was released.
As I modified out-of-date code, I open to public latest code.
Please make good use of this code.
Attention: Under Sample Code is not Activity, but Service.
Sample Code
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;
import com.eastcore.cargo.BuildConfig;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.location.LocationListener;
import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.location.LocationServices;
/**
* LocationService
* 位置情報を取得し続けるだけのサービスクラス
*/
public class LocationService extends Service implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener {
public static final String TAG = "LocationService";
//protected LocationClient mLocationClient;
protected GoogleApiClient mGoogleApiClient;
protected LocationRequest mLocationRequest;
// 緯度
protected double mLatitude;
// 経度
protected double mLongitude;
// 標高
protected double mAltitude;
@Override
public void onCreate() {
super.onCreate();
if (isLocationEnabled()) {
if (BuildConfig.DEBUG) {
Log.d(TAG, "-----onConnected----");
}
connectGooglePlayServices();
}
}
@Override
public void onDestroy() {
Log.d(TAG, "onDestroy");
super.onDestroy();
disConnectGooglePlayServices();
}
/**
* 現在地情報が取得可能な場合はtrue, 取得できない場合はfalse
* @return
*/
protected boolean isLocationEnabled() {
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
}
/**
* GooglePlayServicesに接続する
*/
protected void connectGooglePlayServices() {
mLocationRequest = LocationRequest.create();
// 10秒おきに位置情報を取得する
mLocationRequest.setInterval(10000);
// 精度優先
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
// 最短で5秒おきに位置情報を取得する
// mLocationRequest.setFastestInterval(5000);
// mLocationClient = new LocationClient(getActivity().getApplicationContext(), connectionCallbacks, onConnectionFailedListener);
// mLocationClient.connect();
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(LocationServices.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
if (mGoogleApiClient != null) {
// GoogleApiClient start
mGoogleApiClient.connect();
}
}
/**
* GooglePlayServicesを切断する
*/
protected void disConnectGooglePlayServices() {
if (mGoogleApiClient.isConnected()) {
// 位置情報の取得を停止
LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this);
//mGoogleApiClient.removeLocationUpdates(locationListener);
mGoogleApiClient.disconnect();
}
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public void onConnected(Bundle bundle) {
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
}
@Override
public void onConnectionSuspended(int i) {
}
@Override
public void onLocationChanged(Location location) {
double latitude = location.getLatitude();
double longitude = location.getLongitude();
double altitude = location.getAltitude();
// latitude changed
if (mLatitude != latitude) {
mLatitude = latitude;
}
// longitude changed
if (mLongitude != longitude) {
mLongitude = longitude;
}
// altitude changed
if (mAltitude != altitude) {
mAltitude = altitude;
}
if (BuildConfig.DEBUG) {
Log.d(TAG, "mLatitude:" + mLatitude + ", mLongitude: " + mLongitude + ", mAltitude: " + mAltitude);
}
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {}
}
It is easy to change out-of-date code.
if your code still have deprecated class, it should be replaced the latest code.thanks.
Reference Sites
- Android LocationClient class is deprecated but used in documentation
- FusedLocationProviderApi を使って位置情報を取得
0 件のコメント:
コメントを投稿