|
|
|
![]() |
|
|||||||
|
||||||||
![]() |
| Thread Tools | Rate Thread | Display Modes |
|
#1
|
|||
|
|||
|
[FTC]: [FTC]: Using Android's Built in Sensors
I have been playing around with getting the built in sensors in the ZTE phones to return some values for me. Currently, I just want it to return the different sensors available on the phone. I have written code that will do this, but as soon as I initialized the robot, it gave off this error:
Code:
Can't create handler inside thread that has not called Looper.prepare() My Sensors class Code:
package org.firstinspires.ftc.robotcontroller.internal.sensor;
import android.app.Activity;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.os.Handler;
import android.os.Looper;
import java.util.List;
public class Sensors extends Activity implements SensorEventListener {
private final SensorManager sensorManager;
public Sensors() {
sensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
}
protected void onResume() {
super.onResume();
}
protected void onPause() {
super.onPause();
sensorManager.unregisterListener(this);
}
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
public void onSensorChanged(SensorEvent event) {
}
public String listAvailableSensors() {
List<Sensor> sensorList = sensorManager.getSensorList(Sensor.TYPE_ALL); // gets list of all sensors available on the phone
return sensorList.toString();
}
}
Code:
package org.firstinspires.ftc.robotcontroller.internal.sensor;
import android.hardware.SensorManager;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import com.qualcomm.robotcore.eventloop.opmode.OpMode;
public class TestPhoneSensor extends OpMode {
Sensors sensor;
@Override
public void init() {
sensor = new Sensors();
}
@Override
public void init_loop() {
}
class LooperThread extends Thread { // code block that was supposed to "fix" it
public Handler mHandler;
public void run() {
Looper.prepare();
mHandler = new Handler() {
public void handleMessage(Message msg) {
}
};
Looper.loop();
}
}
@Override
public void loop() {
new Thread() { // other code block that was supposed to "fix" it
public void run() {
new Sensors().runOnUiThread(new Runnable(){
@Override
public void run(){
try {
telemetry.addData("Sensor List:", sensor.listAvailableSensors());//Edit,integrate this on the runOnUiThread
} catch (Exception e) {
telemetry.addData("Error:", e.getStackTrace());
}
}
});
}
}.start();
}
}
|
|
#2
|
|||
|
|||
|
You want the code structured similar to the snippet below
Code:
// get sensorManager and initialise sensor listeners
mSensorManager = (SensorManager) hardwareMap.appContext.getSystemService(Context.SENSOR_SERVICE);
if (mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) == null ||
mSensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE) == null ||
mSensorManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION) == null ||
mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD) == null) {
DbgLog.msg("FTC4855 - For this OpMode a phone with Gyro / Accelerometer / Magnetometer is required");
bInitialized = false;
}
else {
bInitialized = true;
initListeners();
// wait for one second until gyroscope and magnetometer/accelerometer
// data is initialised then scedule the complementary filter task
fuseTimer.scheduleAtFixedRate(new calculateFusedOrientationTask(),
1000, TIME_CONSTANT);
}
...
// This function registers sensor listeners for the accelerometer, magnetometer and gyroscope.
private void initListeners(){
mSensorManager.registerListener(this,
mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_FASTEST);
mSensorManager.registerListener(this,
mSensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE),
SensorManager.SENSOR_DELAY_FASTEST);
mSensorManager.registerListener(this,
mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD),
SensorManager.SENSOR_DELAY_FASTEST);
mSensorManager.registerListener(this,
mSensorManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION),
SensorManager.SENSOR_DELAY_FASTEST);
}
|
![]() |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|