この質問は少し長文かもしれませんが、多くの提案を受け付けています。
問題
の説明:
アミューズメント パーク、つまりジェット コースターで加速度データを記録するために使用する API レベル 8 (Android 2.2) MyTouch デバイスがいくつかあります。また、加速度計のポイントを記録された時間の関数としてプロットして表示できる視覚化機能もあります。ここにジレンマがあります。Android デバイスのシステム時刻はすべて同じというわけではなく、ミリ秒の精度で同じ時刻に設定することもできません (分単位の精度で手動でのみ設定できますが、これはひどいことです)。
解決策の試み:
そこで、まず、アプリの開始時に見つかった GPS 時刻に従ってデータを記録することにしました。長いプロセスの短い: GPS 時間を取得し、システム時間を取得し、差を取得し、データ ポイントを記録したら、システム時間を再度取得し、差を時間に追加し、記録の開始時間としてラベルを付け、それぞれに対して 200 ミリ秒ずつインクリメントします。そこから記録されたデータポイント。ただし、2 つの問題があります (GPS 時刻の取得に関して)。
使用
getLastKnownLocation()
はあまり正確ではありません。実際、それは非常に不正確なようです。現在の GMT/UTC 時間から 9 分ずれている時間が表示されます。ただし、偶然にも、システム時間も Android デバイスで 9 分近くずれています... GPS 時間とシステム時間の差は通常、1000 ~ 5000 ミリ秒 (1 ~ 5 秒) です。私のコードが間違っている可能性があると思います。下に貼っておきますのでご覧ください。requestSingleUpdate()
より最近の場所とおそらく非常に正確な時間を取得できるため、使用するのに最適です。問題?API レベル 9 が必要です... 私たちが持っていないデバイス。
アイデア:
ここに私が思いついたアイデアがあります - ウェブサイトから何らかの方法でグローバル時間を取得し、そこから取得した時間を記録の時間として使用するとどうなるでしょうか? ここに問題があります - どうすればいいのかわかりません。それは私の希望的観測です...
別のアイデア -getTime()
私が単に知らないグローバルタイプの関数はありますか?
私が Android に同様の時計から時間を引き出すようにしたい理由:
ジェット コースターに 2 人が座っていると想像してください。データを記録するとき、前の人は明らかに後ろの人よりもわずかに加速を経験します (これを可視化グラフで確認したいと思います)。そのため、これらのポイントが単一のグローバル時間に従って記録されることが、ミリ秒の精度で重要です。
コード:
Criteria c = new Criteria();
c.setAccuracy(Criteria.ACCURACY_FINE);
if (mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
mLocationManager.requestLocationUpdates(mLocationManager.getBestProvider(c, true), 0, 0, AmusementPark.this);
Criteria criteria = new Criteria();
String bestProvider = mLocationManager.getBestProvider(criteria, false);
Location location = mLocationManager.getLastKnownLocation(bestProvider);
try {
gpsTime = location.getTime();
systemTime = System.currentTimeMillis();
timeDif = gpsTime - systemTime;
Log.e("timedif", "GPS: " + gpsTime + ", System: " + systemTime +", Dif: " + timeDif);
} catch (NullPointerException e){
}
}
更新:
ここでは、誰かが一種の「サーバー」を提案していますgetTime()
。私は彼のコード/回答が本当に好きですが、これが最善の解決策である場合、この「サーバー」とは何ですか、および/またはどのように設定しますか?