diff --git a/AndroidManifest.xml b/AndroidManifest.xml index e62697e..712f134 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1,12 +1,12 @@ + android:versionCode="3" + android:versionName="1.2" > + android:targetSdkVersion="19" /> Akzelerometer und Kompass Sensorfusions Demo Über - + Fehlendes Gyroskop + Dieses Gerät hat keinen Gyroskop-Sensor der aber notwendig ist, damit diese App richtig funktioniert. Bitte verwende ein aktuelleres Gerät, das ein Gyroskop hat. + OK + diff --git a/res/values/strings.xml b/res/values/strings.xml index a4042c0..1e62e9b 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -12,5 +12,8 @@ Accelerometer and Compass Sensor fusion demo About + Gyroscope Missing + Your device has no hardware gyroscope sensor, which would be necessary for this app to work properly. Please run it on a newer device that has a gyroscope. + OK diff --git a/src/org/hitlabnz/sensor_fusion_demo/HardwareChecker.java b/src/org/hitlabnz/sensor_fusion_demo/HardwareChecker.java new file mode 100644 index 0000000..d1f1180 --- /dev/null +++ b/src/org/hitlabnz/sensor_fusion_demo/HardwareChecker.java @@ -0,0 +1,27 @@ +package org.hitlabnz.sensor_fusion_demo; + +import android.hardware.Sensor; +import android.hardware.SensorManager; + +/** + * Class that tests availability of hardware sensors. + * + * @author Alex + * + */ +public class HardwareChecker implements SensorChecker { + + boolean gyroscopeIsAvailable = false; + + public HardwareChecker (SensorManager sensorManager) { + if(sensorManager.getSensorList(Sensor.TYPE_GYROSCOPE).size() > 0) { + gyroscopeIsAvailable = true; + } + } + + @Override + public boolean IsGyroscopeAvailable() { + return gyroscopeIsAvailable; + } + +} diff --git a/src/org/hitlabnz/sensor_fusion_demo/SensorChecker.java b/src/org/hitlabnz/sensor_fusion_demo/SensorChecker.java new file mode 100644 index 0000000..85a8be0 --- /dev/null +++ b/src/org/hitlabnz/sensor_fusion_demo/SensorChecker.java @@ -0,0 +1,11 @@ +package org.hitlabnz.sensor_fusion_demo; + +public interface SensorChecker { + + /** + * Checks if the device that is currently running the application has a hardware gyroscope built into it. + * + * @return True, if a gyroscope is available. False otherwise. + */ + public boolean IsGyroscopeAvailable (); +} diff --git a/src/org/hitlabnz/sensor_fusion_demo/SensorSelectionActivity.java b/src/org/hitlabnz/sensor_fusion_demo/SensorSelectionActivity.java index 68e0efe..3b38bc4 100644 --- a/src/org/hitlabnz/sensor_fusion_demo/SensorSelectionActivity.java +++ b/src/org/hitlabnz/sensor_fusion_demo/SensorSelectionActivity.java @@ -10,6 +10,8 @@ import org.hitlabnz.sensor_fusion_demo.orientationProvider.ImprovedOrientationSe import org.hitlabnz.sensor_fusion_demo.orientationProvider.OrientationProvider; import org.hitlabnz.sensor_fusion_demo.orientationProvider.RotationVectorProvider; +import android.app.AlertDialog; +import android.content.DialogInterface; import android.content.Intent; import android.hardware.SensorManager; import android.opengl.GLSurfaceView; @@ -61,9 +63,29 @@ public class SensorSelectionActivity extends FragmentActivity { mViewPager = (ViewPager) findViewById(R.id.pager); mViewPager.setAdapter(mSectionsPagerAdapter); + // Check if device has a hardware gyroscope + SensorChecker checker = new HardwareChecker((SensorManager) getSystemService(SENSOR_SERVICE)); + if(!checker.IsGyroscopeAvailable()) { + // If a gyroscope is unavailable, display a warning. + displayHardwareMissingWarning(); + } } - @Override + private void displayHardwareMissingWarning() { + AlertDialog ad = new AlertDialog.Builder(this).create(); + ad.setCancelable(false); // This blocks the 'BACK' button + ad.setTitle(getResources().getString(R.string.gyroscope_missing)); + ad.setMessage(getResources().getString(R.string.gyroscope_missing_message)); + ad.setButton(DialogInterface.BUTTON_NEUTRAL, getResources().getString(R.string.OK), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + } + }); + ad.show(); + } + + @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.sensor_selection, menu);