ANDROIDでGEOFENCEを
使って見る
2014/12/13
自己紹介
• 中谷 克紀
• Twitter @KatsukiNakatani
• 大阪のSIerでサーバ周りのエンジニアをしています(開発者ではないです)
なので仕事で開発をすることはあんまりないです。
• Androidは基本趣味の世界です。
(でも今年初めて仕事でAndroid開発しました!)
• 好きな言語はC# , JAVA ,最近Swiftも少し。
GeoFenceって何?
• GeoFenceとは特定の位置(場所)の周りに網(フェンス)を
張って、その網への出入りを検知してくれる機能です。
エリアに入る エリアから出る
Google IO 2013で発表されました。
GeoFenceを利用するために
• build.gradleへ依存関係を追加する
dependencies {
compile 'com.google.android.gms:play-services-location:6.5.+’
}
※GooglePlayServiceSDK 6.5より各機能が分割されました。(今まで通り
フル機能を利用したい場合は下記の記述としてください)
dependencies {
compile 'com.google.android.gms:play-services:6.5.+’
}
GoogleAPI Clientの初期化・接続
//インスタンスの初期化
public onCreate (){
mApiClient = new GoogleApiClient.Builder(getApplicationContext())
.addApi(LocationServices.API) //利用するAPIの指定
.addConnectionCallbacks(this) //接続完了リスナ
.addOnConnectionFailedListener(this) //接続失敗リスナ
.build();
}
//インスタンスの接続
public onResume(){
if(mApiClient != null){
mApiClient.connect(); //接続します
}
}
//インスタンスの切断
public onPause(){
if(mApiClient != null){
mApiClient.disconnect(); //切断します
}
}
GeoFenceを登録します
@Override
public void onConnected(Bundle bundle) { //Connectされたら呼ばれます。
ArrayList<Geofence> fenceList = new ArrayList<>();
Geofence geofence = new Geofence.Builder() //Builderからフェンスを作成します
.setRequestId(“Fence-1”) //フェンスのユニーク名前を設定します
.setTransitionTypes(Geofence.GEOFENCE_TRANSITION_EXIT) //入・出を指定します
.setCircularRegion(latitude,longuitude,100) //中心となる緯度・経度・半径を指定します
.setExpirationDuration(Geofence.NEVER_EXPIRE) //チェックをする期限を指定します
.build();
fenceList.add(geofence); //フェンスリストに追加します
//イベント発生時に動作するPendingIntentを作成します
Intent intent = new Intent(getApplicationContext(), NotificationService.class);
PendingIntent pendingIntent = PendingIntent.getService(this, 0,
intent,PendingIntent.FLAG_UPDATE_CURRENT);
//AddGeofenceで、ApiClientとイベント検知用のフェンス、PendingIntentを渡します。
LocationServices.GeofencingApi.addGeofences(mApiClient, fenceList, pendingIntent);
}
これだけです
すごく簡単でしょう!
ちょっとハマったこと
インターネットでググってよく出てくるコードではLocationClientを使用している
コードが多く見られます
SDK5.xxあたりからLocationClientはDeprcatedとなっており
SDK6.5で完全に使えなくなったようです
DeveloperPageもこの通り
実装する場合は、 LocationServices.GeofencingApiを使用した
方法を使ってください
ご静聴ありがとうございました

AndroidでGeoFenceを使って見る