diff --git a/ExampleBehaviour/SensorBehaviour.cs b/ExampleBehaviour/SensorBehaviour.cs index 8a7d99a..401e88f 100644 --- a/ExampleBehaviour/SensorBehaviour.cs +++ b/ExampleBehaviour/SensorBehaviour.cs @@ -30,10 +30,12 @@ void Update () { #if UNITY_ANDROID if (plugin != null) { - float[] sensorValue = plugin.Call("getSensorValues", "accelerometer"); - if (sensorValue != null) { - Debug.Log("sensorValue:" + string.Join(",", new List(sensorValue).ConvertAll(i => i.ToString()).ToArray())); - } + if (plugin.Call("hasSensor", "accelerometer") == true) { + float[] sensorValue = plugin.Call("getSensorValues", "accelerometer"); + if (sensorValue != null) { + Debug.Log("sensorValue:" + string.Join(",", new List(sensorValue).ConvertAll(i => i.ToString()).ToArray())); + } + } } #endif } diff --git a/README.md b/README.md index 8b0650b..956b603 100644 --- a/README.md +++ b/README.md @@ -86,6 +86,15 @@ This makes enable more frequently method calling than game FPS. } ``` +Verify if a sensor exist +```c# +#if UNITY_ANDROID + if (plugin.Call("hasSensor", "accelerometer") == true) { + Debug.log("accelerometer exist"); + } +#endif +``` + Available Sensors ---- * accelerometer diff --git a/library/release/AndroidSensorPlugin.jar b/library/release/AndroidSensorPlugin.jar index de8bcf2..1311e7a 100644 Binary files a/library/release/AndroidSensorPlugin.jar and b/library/release/AndroidSensorPlugin.jar differ diff --git a/library/src/main/java/jp/kshoji/unity/sensor/UnitySensorPlugin.java b/library/src/main/java/jp/kshoji/unity/sensor/UnitySensorPlugin.java index d3b9beb..2c5ab90 100644 --- a/library/src/main/java/jp/kshoji/unity/sensor/UnitySensorPlugin.java +++ b/library/src/main/java/jp/kshoji/unity/sensor/UnitySensorPlugin.java @@ -47,6 +47,32 @@ public static UnitySensorPlugin getInstance() { return result; } + /** + * Get if the sensor is valid + * Called by Unity + * + * @param sensorKind sensor kind @see {@link Sensors} + * @return true if the sensor exist + */ + + public boolean hasSensor(String sensorKind) { + + Sensors specifiedSensor; + try { + specifiedSensor = Sensors.valueOf(sensorKind); + } catch (IllegalArgumentException e) { + // valueOf failed + Log.e(getClass().getName(), "Bad sensor type: " + sensorKind + ", available types: " + Arrays.toString(Sensors.values())); + return false; + } + + if( sensorManager.getDefaultSensor( specifiedSensor.getSensorType() ) == null) { + return false; + } + + return true; + } + /** * Terminates instance * Must be called on App's last use. @@ -104,6 +130,22 @@ public void startSensorListening(String sensorKind) { addSensorEventListener(sensorKind, null, null); } + /** + * Stop to listen sensor + * Called by Unity + * + * @param sensorKind sensor kind @see {@link Sensors} + * @return true if the listener is destroyed + */ + public boolean stopSensorListening(String sensorKind) { + String sensorKindConverted = convertSensorKind(sensorKind); + if(eventListeners.containsKey(sensorKindConverted)) { + eventListeners.remove(sensorKindConverted); + return true; + } + return false; + } + /** * Add sensor listener with callback * Called by Unity