1

在我发现这个很好的自定义组件(这个词是否正确?)显示从 Android 设备的温度传感器读取的温度后,我想用模拟器对其进行测试,看看它是如何工作的,所以我找到了这个 Sensor Simulator和更改了组件的源以使用它。

我确实设法让它在仿真设备上工作,但是我做了一些幸运的猜测并且想知道我到底做了什么:-)

以下是我必须对温度计代码进行的更改,以使其与温度传感器模拟器一起工作:

导入sensorsimulator类后:

import org.openintents.sensorsimulator.hardware.Sensor;
import org.openintents.sensorsimulator.hardware.SensorEvent;
import org.openintents.sensorsimulator.hardware.SensorEventListener;
import org.openintents.sensorsimulator.hardware.SensorManagerSimulator;

我不得不删除

import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;

改变了

private SensorManager getSensorManager()

进入

private SensorManagerSimulator getSensorManager()

然后第一个问题出现了。根据How to use the SensorSimulator in your application我更改了行:

return (SensorManager) getContext().getSystemService(Context.SENSOR_SERVICE);

进入

return SensorManagerSimulator.getSystemService(this, SENSOR_SERVICE);

那是一个错误。在this我不得不使用的情况下getContext(),我不知道为什么会这样 - 也许是因为thermometer类扩展View因此它不是活动?而不是SENSOR_SERVICE我不得不把Context.SENSOR_SERVICE.

在那之后,下一个变化是:

private void attachToSensor() {
    SensorManagerSimulator sensorManager = getSensorManager();
    sensorManager.connectSimulator();

由于它似乎sensorsimulator没有实现getSensorList我不得不更换

List<Sensor> sensors = sensorManager.getSensorList(Sensor.TYPE_TEMPERATURE);

Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_TEMPERATURE);

并删除

if (sensors.size() > 0) {
        Sensor sensor = sensors.get(0);

然后,当然我也删除了该else语句,因此当温度传感器丢失的情况现在可能会在尝试注册侦听器时引发异常。

最后,为了消除编译错误,我还必须进行一项更改,由于某种原因,registerListenerin的实现Sensor Simulator接受的参数比 android 的方法少,所以我不得不handler

sensorManager.registerListener(this, sensor, SensorManagerSimulator.SENSOR_DELAY_FASTEST, handler);

在这里,我想知道为什么这次我不必使用getContext()而不是this!?

这就是我必须更改的所有内容,最后一件事是删除未使用的 vars(处理程序)、未使用的导入(java.util.List)和 remove handler = new Handler();

我发现这个自定义 UI 组件的示例非常有趣,希望有人能够澄清并完善代码。

4

0 回答 0