我使用LibGDX制作桌面/ Android应用程序。在我的应用程序的一部分,我正在检查光传感器,如果它是android。这适用于android,除非我将它实现到我的LibGDX项目中,我对如何传递这些数据感到困惑。
SensorManager sm;
Sensor s;
float lux = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AndroidApplicationConfiguration cfg = new AndroidApplicationConfiguration();
sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
s = sm.getDefaultSensor(Sensor.TYPE_LIGHT);
initialize(new MyLibGDXMain(), cfg);
}
@Override
public void onSensorChanged(SensorEvent event) {
lux = event.values[0];
}
我可以在这里检索我的光传感器数据,但是一旦我初始化MyLibGDXMain,我就会丢失这些数据。如果我将SensorEventListener添加到该类,则会失去与桌面版本的兼容性。所以我试图为MyLibGDXMain创建另一个构造函数来传递lux值,但这只会破坏LibGDX应用程序正在做的事情。
这个问题不是如何在android上检索传感器数据而是 如何在不破坏与桌面项目的兼容性的情况下将这些传感器数据导入我的LibGDX主页?
答案 0 :(得分:4)
您需要在应用程序和特定于平台的代码之间创建一个接口......
https://github.com/libgdx/libgdx/wiki/Interfacing-with-platform-specific-code
一种方法是在主项目中创建一个接口LightSensorInterface
,其中包含方法float getCurrentLux();
public interface LightSensorInterface {
public float getCurrentLux();
}
然后你必须创建一个在android项目中实现该接口的类,以及在桌面项目中实现该接口的类。
public class AndroidLightSensor implements LightSensorInterface, SensorEventListener {
private float currentLux = 0;
@Override
public float getCurrentLux() {
return currentLux;
}
@Override
public void onSensorChanged(SensorEvent event) {
this.currentLux = event.values[0];
}
}
由于桌面应用程序上没有光传感器,因此实现的方法可能只返回一些固定值。
android项目中实现的getCurrentLux()
需要返回上次调用onSensorChanged()
时得到的lux值...
MyLibGDXMain()的构造函数需要引用LightSensorInterface
,在初始化应用程序时,您将通过特定于平台的类:
onCreate() {
....
AndroidLightSensor sensor = new AndroidLightSensor(...);
initialize(new MyLibGDXMain(sensor);
}
如果你想总是拥有当前值,你需要在渲染循环中获取当前值...希望你得到我的意思......
希望它有所帮助.. ::)