Android模拟器上的Vintage Thermometer组件+ SensorSimulator

时间:2012-04-11 02:31:52

标签: android android-emulator android-ui android-sensors android-custom-view

我发现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传感器时,现在可能会在尝试注册监听器时抛出异常。

最后,为了摆脱编译错误,还有一个必须做的改变,由于某种原因,registerListenerSensor Simulator的实现接受的参数少于android的方法所以我有从

中删除handler参数
sensorManager.registerListener(this, sensor, SensorManagerSimulator.SENSOR_DELAY_FASTEST, handler);

在此,我想知道为什么这次我不必使用getContext()代替this

这就是我必须改变的全部内容,最后一件事是删除未使用的变量(处理程序),未使用的导入(java.util.List)并删除handler = new Handler();

我发现自定义UI组件的这个例子非常有趣,希望有人能够澄清并且可能会对代码进行修改。

0 个答案:

没有答案