質問編集履歴

1

文書の追記

2017/08/09 01:22

投稿

giwagiwagiwa
giwagiwagiwa

スコア34

test CHANGED
File without changes
test CHANGED
@@ -109,3 +109,105 @@
109
109
  ###補足情報(言語/FW/ツール等のバージョンなど)
110
110
 
111
111
  Android(5.x)で開発を進めています。
112
+
113
+
114
+
115
+ ###追記(2017/08/09)
116
+
117
+ 下記ソースでバックグラウンド時もセンサの値を取得することには成功しました。(おそらく)
118
+
119
+ ただ、0.2秒ごとにセンサの値を取得して判定するというのはプログラム的にどうなのかという疑問が残ります。。
120
+
121
+ もっとスマートな方法は無いでしょうか。。。
122
+
123
+ ```JavaScript
124
+
125
+ document.addEventListener('deviceready', onDeviceReady, false);
126
+
127
+ function onDeviceReady() {
128
+
129
+ // 重力加速度のしきい値
130
+
131
+ var GRAVITY_MIN = 9.8;
132
+
133
+ var GRAVITY_MAX = 12.00;
134
+
135
+ // 歩数
136
+
137
+ var _step = 0;
138
+
139
+ // 現在歩いているかどうか
140
+
141
+ var _isStep = false;
142
+
143
+
144
+
145
+ //センサ取得成功時
146
+
147
+ function onSuccess(acceleration) {
148
+
149
+ var ag = acceleration;
150
+
151
+ // 重力加速度ベクトルの大きさを取得
152
+
153
+ var acc = Math.sqrt(ag.x*ag.x + ag.y*ag.y + ag.z*ag.z);
154
+
155
+ console.log(acc);
156
+
157
+ if (_isStep) {
158
+
159
+ // 歩行中にしきい値よりも低ければ一歩とみなす
160
+
161
+ if (acc < GRAVITY_MIN) {
162
+
163
+ _step++;
164
+
165
+ _isStep = false;
166
+
167
+ }
168
+
169
+ } else {
170
+
171
+ // しきい値よりも大きければ歩いているとみなす
172
+
173
+ if (acc > GRAVITY_MAX) {
174
+
175
+ _isStep = true;
176
+
177
+ $('#hosu').text(_step);
178
+
179
+ console.log(_step + "歩");
180
+
181
+ }
182
+
183
+ }
184
+
185
+ }
186
+
187
+ //センサ取得失敗時
188
+
189
+ function onError() {
190
+
191
+ console.log('watchAcceleration on Error!');
192
+
193
+ }
194
+
195
+
196
+
197
+ //0.2sごとにセンサの値を取得
198
+
199
+ var options = { frequency: 200 };
200
+
201
+ var watchID = navigator.accelerometer.watchAcceleration(onSuccess, onError, options);
202
+
203
+
204
+
205
+
206
+
207
+ cordova.plugins.backgroundMode.enable();
208
+
209
+ cordova.plugins.backgroundMode.on('enable', window.addEventListener('devicemotion', watchID));
210
+
211
+ }
212
+
213
+ ```