DX・デジタルトランスフォーメーション

AppStoreにて無料公開中! ”システム手帳”で検索! - AppStoreへ iPad版 - iPhone版

ブロックチェーン・暗号技術 | android | iOS | Web | アプリの著作権 | 日本のなりたち | 禅・大乗仏教 | 新しい社会

androidとiOSの歩数計(ステップカウンタ)実装方法の違い

歩数計は2017年現在、ほとんどのスマホに実装されている。

実装される前は、加速度センサーを歩数計の代わりに用いていたために、電池の消耗が激しく使い物にはならなかった。

2013年に発売されたスマホ機種から実装が始まっている。

iPhoneでは歩数をOSレベルで日次で集計しデータベース化してくれるが、androidは歩数を検知するのみで集計まではしてくれないため、日毎の集計はアプリが行う必要がある。

iOS

・歩数計ハードウェア実装はiPhone5S以降の機種のみ

・日付を指定して取得できる

objectivec

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);  }}// 歩数を検知したときコールされるメソッド@Overridepublic void onSensorChanged(SensorEvent sensorEvent) {  float[] values = sensorEvent.values;  // Sensorを最初に起動してからの累積値  long mTimestamp = sensorEvent.timestamp;  // Sensorを最初に起動してからの経過ナノ秒値  int mStepCount = (int)values[0];  // Sensorを最初に起動してからの累積歩数
}}