我发现this nice custom component类似(这是正确的词?)显示从Android设备的温度传感器读取的温度,我想用模拟器测试它,看看它是如何工作的,所以我发现this 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()
然后出现了第一个问题。根据如何在您的应用程序中使用SensorSimulator 我更改了行:
return (SensorManager) getContext().getSystemService(Context.SENSOR_SERVICE);
进入
return SensorManagerSimulator.getSystemService(this, SENSOR_SERVICE);
那是一个错误。 this
的Instad我必须使用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
语句,因此当缺少temeperature传感器时,现在可能会在尝试注册监听器时抛出异常。
最后,为了摆脱编译错误,还有一个必须做的改变,由于某种原因,registerListener
中Sensor Simulator
的实现接受的参数少于android的方法所以我有从
handler
参数
sensorManager.registerListener(this, sensor, SensorManagerSimulator.SENSOR_DELAY_FASTEST, handler);
在此,我想知道为什么这次我不必使用getContext()
代替this
!
这就是我必须改变的全部内容,最后一件事是删除未使用的变量(处理程序),未使用的导入(java.util.List)并删除handler = new Handler();
。
我发现自定义UI组件的这个例子非常有趣,希望有人能够澄清并且可能会对代码进行修改。