Necesito hacer un pan tostado de Android a partir de un hilo de procesamiento, que es personalizado para OpenCV, así que no puedo usar runOnUiThread() como se sugiere aquí: Android: Toast in a thread.cómo hacer tostadas desde otro hilo (sans runOnUiThread)
La mayor parte de este código es de la aplicación de muestra CVCamera. Pero los que no conocen, cuando selecciono el botón de menú de la resaca, el SURFProcessor se llama así:
else if (item.getTitle().equals("SURF")) {
defaultcallbackstack.addFirst(new SURFProcessor());
toasts(DIALOG_TUTORIAL_SURF, "");
}
Este hilo procesador se ejecuta de manera que cuando se presiona el botón de la cámara del teléfono (capturePress = true), se toma una imagen y procesamiento hecho. Quiero llamar al método tostadas como se muestra:
class SURFProcessor implements NativeProcessor.PoolCallback {
@Override
public void process(int idx, image_pool pool, long timestamp,
NativeProcessor nativeProcessor) {
if(capturePress) {
String processMsg = processor.processFeatures(idx, pool, cvcamera.DETECT_SURF);
capturePress = false;
toasts(PROCESS_MESSAGE, processMsg);
}
}
}
Aquí es el método tostadas, que se encuentra en la clase principal que se extiende Actividad:
void toasts(int id, String msg) {
switch (id) {
case PROCESS_MESSAGE:
Toast.makeText(MMRapp.this, msg, Toast.LENGTH_LONG).show();
break;
.........
En este momento este código me da un error: "no se puede crear controlador en el hilo que no ha llamado a Looper.prepare(). " ¿Cómo hago para llamar al método de las tostadas? ¿O es posible hacer que el método de las tostadas escuche un cambio en processMsg? Si es posible, me las puedo arreglar enviando el processMsg o cambiando una variable de clase. En esencia, necesito una cadena actualizada a partir de este hilo del procesador.
Muchas gracias, y le proporcionaré más información/código si lo desea.
-Tom
gracias! funciona como un encanto ... pensé que tenía que haber una manera simple de hacerlo. – wrapperapps