AndroidでESLibraryを使ってLocationを取得する
こんにちは。tsmsogn です。
今回は、ESLibrary を使って位置情報を取得するサンプルを作ってみたいと思います。
SensorManagerをdependenciesに追加する
SensorManager は、SensorDataManeger を dependencies に追加します。
SensorManager は、各センサーを扱うラッパーライブラリで、SensorDataManager は SensorManager が返してくる JSON を、表示しやすいようにパースしたり、そのデータを保存するためのライブラリです。
SensorManager、および SensorDataManager は jcenter などで配布されていないようなので JitPack を使って compile するようにします。なお、JitPack でビルドできるようにパッチを当てたものを使用しています。
diff --git a/app/build.gradle b/app/build.gradle index 4f958d5..9cb2002 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -26,5 +26,6 @@ dependencies { }) compile 'com.android.support:appcompat-v7:25.3.1' compile 'com.android.support.constraint:constraint-layout:1.0.2' + compile 'com.github.tsmsogn:SensorManager:c0dac89' testCompile 'junit:junit:4.12' } diff --git a/build.gradle b/build.gradle index 1ea4bd0..345f00d 100644 --- a/build.gradle +++ b/build.gradle @@ -15,6 +15,7 @@ buildscript { allprojects { repositories { jcenter() + maven { url 'https://jitpack.io' } } }
https://jitpack.io/#emotionsense/SensorManager/1708cd6
https://jitpack.io/#emotionsense/SensorManager/1708cd6
マニフェストにパーミッション追加
$ git diff --cached app/src/main/AndroidManifest.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9b40b6a..1ec8ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -18,4 +18,8 @@ </activity> </application> + <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> + <!-- Needed only if your app targets Android 5.0 (API level 21) or higher. --> + <uses-feature android:name="android.hardware.location.gps" /> + </manifest>
PullLocationAsyncTaskを追加
private class PullLocationAsyncTask extends AsyncTask<Void, Void, LocationData> { private static final String TAG = "PullLocationAsyncTask"; private ESSensorManager sensorManager; PullLocationAsyncTask(Context context) { try { sensorManager = ESSensorManager.getSensorManager(context); sensorManager.setGlobalConfig(GlobalConfig.PRINT_LOG_D_MESSAGES, false); } catch (ESException e) { e.printStackTrace(); } } @Override protected LocationData doInBackground(Void... params) { LocationData data = null; try { Log.d(TAG, "Start sensing"); data = (LocationData) sensorManager.getDataFromSensor(SensorUtils.SENSOR_TYPE_LOCATION); Log.d(TAG, "Sensed"); } catch (ESException e) { e.printStackTrace(); } return data; } }
LocationDataを表示
あとは、PullLocationAsyncTask#onPostExecute() などで、取得したデータを表示すれあば
new PullLocationAsyncTask(this) { @Override protected void onPostExecute(LocationData locationData) { updateUI(locationData); } }.execute();
実際に、約5秒毎に1分間の位置情報が取得できていると思います。