私は、Android APIがさまざまなセンサーの生データを融合して仮想センサーを生成するために使用するアルゴリズムのために、ある程度時間を探しています。AndroidセンサーTYPE_LINEAR_ACCELERATIONとTYPE_ROTATION_VECTORはどのように実装されていますか?
どのように実装されましたか? ソースコードはどこかで入手できますか?
私は、Android APIがさまざまなセンサーの生データを融合して仮想センサーを生成するために使用するアルゴリズムのために、ある程度時間を探しています。AndroidセンサーTYPE_LINEAR_ACCELERATIONとTYPE_ROTATION_VECTORはどのように実装されていますか?
どのように実装されましたか? ソースコードはどこかで入手できますか?
を読みますソースコードはどこかで入手できますか?
残念ながら、Fused Location Provider APIはAndroidオープンソースプロジェクトの一部ではなく、独自のGoogleソフトウェアであり、ソースコードが公開されていないGoogle Playサービスの一部として実装されています。実際には、FusedLocationProviderApi.java
インタフェースの実装は、purposedly例えば、難読化されています
public class zzd implements FusedLocationProviderApi {
public zzd() {
}
public Location getLastLocation(GoogleApiClient var1) {
zzl var2 = LocationServices.zzj(var1);
try {
return var2.getLastLocation();
} catch (Exception var4) {
return null;
}
}
...
は、彼らはどのように実装されましたか?
ソースは入手できないため、実装されている正確さだけを推測することがあります。
あなたは、このような加速度計データにアクセスすることができ、その後センサーマネージャー
private SensorManager mSensorManager;
private Sensor mSensor;
...
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
のインスタンスを取得する必要があります。
public void onSensorChanged(SensorEvent event){
// In this example, alpha is calculated as t/(t + dT),
// where t is the low-pass filter's time-constant and
// dT is the event delivery rate.
final float alpha = 0.8;
// Isolate the force of gravity with the low-pass filter.
gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0];
gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1];
gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2];
// Remove the gravity contribution with the high-pass filter.
linear_acceleration[0] = event.values[0] - gravity[0];
linear_acceleration[1] = event.values[1] - gravity[1];
linear_acceleration[2] = event.values[2] - gravity[2];
}
詳細についてはdeveloper.android Page