androidとiOSの歩数計(ステップカウンタ)実装方法の違い
歩数計は2017年現在、ほとんどのスマホに実装されている。
実装される前は、加速度センサーを歩数計の代わりに用いていたために、電池の消耗が激しく使い物にはならなかった。
2013年に発売されたスマホ機種から実装が始まっている。
iPhoneでは歩数をOSレベルで日次で集計しデータベース化してくれるが、androidは歩数を検知するのみで集計まではしてくれないため、日毎の集計はアプリが行う必要がある。
iOS
・歩数計ハードウェア実装はiPhone5S以降の機種のみ
・日付を指定して取得できる
CMPedometer *mPedometer = [[CMPedometer alloc] init];
if ([CMPedometer isStepCountingAvailable]) {
[mPedometer queryPedometerDataFromDate:fetchStartDate toDate:fetchEndDate withHandler:^(CMPedometerData *data, NSError *error) {
// 歩数
NSNumber *steps = data.numberOfSteps;
}];
}
android
・Fujitsu ARROWSなどの低価格機種には歩数計が実装されていない
・SensorEventListener をサービスとして別プロセスで実行させる必要がある
・歩数は累積値だけしかわからないので、日毎の歩数はアプリが計算して求める必要がある
・日付指定の歩数を取得できない
Intent serviceIntent = new Intent(context, StepCounterService.class);
context.startService(serviceIntent);
public class StepCounterService extends Service implements SensorEventListener {
@Override
public void onCreate() {
// API19(Android 4.4)以上
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
// 歩数を取得
SensorManager mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
Sensor mSensorStepCounter = mSensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);
// リスナー設定
mSensorManager.registerListener (this, mSensorStepCounter, SensorManager.SENSOR_DELAY_NORMAL);
}
}
// 歩数を検知したときコールされるメソッド
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
float[] values = sensorEvent.values; // Sensorを最初に起動してからの累積値
long mTimestamp = sensorEvent.timestamp; // Sensorを最初に起動してからの経過ナノ秒値
int mStepCount = (int)values[0]; // Sensorを最初に起動してからの累積歩数
}
}
2023年12月 | ||||||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
  |   |   |   |   | 1 | 2 |
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |   |   |   |   |   |   |
iOS
web
アプリの著作権
ブロックチェーン/暗号技術
新しい社会
禅・大乗仏教
日本のなりたち