- Home /
Cannot get value from sensor as Android background service
I need to build an android app which needs to get step sensor in background, so that even the app is closed it can still return the step count.
I make a java plug-in with android studio. I can get the static value from it. However the sensor value has to be non-static and sharedprefs also need to be non-static. Is that I cannot get non-static value from java class?
Here is the code:
(Java Plug-in On Android Studio Side)
public class My_Plugin extends Activity {
//Testing: Unity can get the words successfully
public static String getMessage()
{ return "Hello Android!"; }
//sensor
public float stepCount = 0;
public float stepDetect = 0;
private SensorManager mgr;
private Sensor step_counter_sensor;
private Sensor step_detector_sensor;
SharedPreferences settings;
String pref = "pref";
SharedPreferences.Editor editor;
//functions call by Unity
public float checkPrefs(){
return settings.getFloat("Checking", 9999f);
}
public float getStepCount(){
return stepCount;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//save a value "100" which pass to Unity
settings = getSharedPreferences(pref,0);
editor = settings.edit();
editor.putFloat("Checking", 100);
editor.apply();
//Sensor management
mgr = (SensorManager) this.getSystemService(SENSOR_SERVICE);
step_counter_sensor = mgr.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);
if (step_counter_sensor == null) // sensor not supported
Log.d("SensorTest", "sensor of interest not detected.");
else {
mgr.registerListener(listener, step_counter_sensor, Sensor.REPORTING_MODE_ON_CHANGE);
}
step_detector_sensor = mgr.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR);
if (step_detector_sensor == null) // sensor not supported
Log.d("SensorTest", "sensor of interest not detected.");
else {
mgr.registerListener(listener, step_detector_sensor, Sensor.REPORTING_MODE_ON_CHANGE);
}
}
private SensorEventListener listener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_STEP_COUNTER) {
stepCount = event.values[0];
}
else if (event.sensor.getType() == Sensor.TYPE_STEP_DETECTOR) {
if (event.values[0] == 1)
stepDetect++;
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
};
(App on Unity side)
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class callPlugin : MonoBehaviour
{
public Text txt;
public Text txt2;
public Text txt3;
AndroidJavaClass pluginClass;
void Start()
{
pluginClass = new AndroidJavaClass("kanwwong2.scm.myplugin.My_Plugin");
// call testing function: Success
txt.text = pluginClass.CallStatic<string>("getMessage");
// call to get value: Fail
// it should return 100 if succeed, but it gives me 0
txt2.text = pluginClass.Call<float> ("checkPrefs").ToString();
// also fail
txt3.text = pluginClass.Call<float> ("getStepCount").ToString();
}
}
I cannot get the sensor value directly nor get the shared pref value. Can anyone help me please? What should I do in order to get the step count?
Your answer
Follow this Question
Related Questions
How to access the gyro in Unity? Who can offer me a detailed solution? 2 Answers
Having issue with "unable to convert class to dex format" extremely simple JAR in empty project. 0 Answers
Finish UnityPlayerActivity in android unity project 0 Answers
Unable to locate player settings. bin/Data/settings.xml 3 Answers
Need some help with Unity Airpush plugin 0 Answers