Reputation: 66565
I am trying to create an application which reads data from digital compass. I tried to reuse the code from the book Professional Android Application Development but the IDE displayed a note
The type SensorListener is deprecated
I guess it is because the code from the book is written for the earlier SDK version so I tried to use SensorEventListener instead.
Then when I tried to register the listener
sensorManager.registerListener(sensorListener, SensorManager.SENSOR_ORIENTATION, SensorManager.SENSOR_DELAY_FASTEST);
an error appeared:
The method registerListener(SensorListener, int, int) in the type SensorManager is not applicable for the arguments (SensorEventListener, int, int)
so I tried to cast SensorEventListener to SensorListener, but the application doesn't work.
Does anyone know how to use sensor in newer SDK versions?
Thank you.
Upvotes: 1
Views: 14456
Reputation: 1006584
There is a separate SensorEventListener
class you need to use. See here.
Upvotes: 8
Reputation: 2518
I had the same problem but when I casted the first 2 parameters as (SensorEventListener) and (Sensor) it worked. I then realised the problem was that for some reason I had declared the Sensor as type "Object" and not "Sensor", so Eclipse failed to identify the types of parameters.
This worked for me:
mSensorManager.registerListener((SensorManager)this, (Sensor)mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
But now I have correctly declared mAccelerometer as type Sensor I no longer need the casts.
Upvotes: 1
Reputation: 2085
The method is just deprecated, you have to use
registerListener(SensorEventListener, Sensor, int)
instead.
Upvotes: 1
Reputation: 25060
You actually need to pass in a Senor object, not just the ID of it.
Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
sensorManager.registerListener(sensorListener, sensor, SensorManager.SENSOR_DELAY_FASTEST)
Upvotes: 6