スマートフォンアプリ作成

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

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を最初に起動してからの累積歩数

}

}

2018年11月
    123
45678910
11121314151617
18192021222324
252627282930 
android
iOS
アプリの著作権
ブロックチェーン/暗号技術
日本のなりたち

AppStoreにて無料公開中! ”システム手帳”で検索! - AppStoreへ iPad版 - iPhone版
スマートフォンアプリ作成