Blackberry: FileSystemJournalListener no devuelve la ruta de la imagen recién capturada

FileSystemJournalListener no devuelve la ruta de la imagen recién capturada. Mi cámara guarda imágenes en sdcard/blackberry/pictures/...

Pero el oyente me da una ruta de imagen en blanco en store/home/user/pictures/Image_1337710522032.jpg

y el archivo guardado real está en sdcard/BlackBerry/pictures/IMG00010-20111019-1225.jpg

¿Cómo se supone que configure FileSystemJournalListener para escanear la tarjeta SD en busca de la ruta de la imagen recién agregada?

Gracias de antemano.

preguntado el 22 de mayo de 12 a las 20:05

por favor publique el código para su oyente. -

1 Respuestas

Este es el ejemplo apropiado a seguir. de la documentación para desarrolladores de BlackBerry.

En la aplicación que tengo que hace esto, mi FileSystemJournalListener se parece al código de abajo. Tiene que iterar sobre los USN para encontrar la nueva imagen.

Tú también puedes ver esta página para obtener más información acerca de la FileSystemJournal y cómo buscar nuevos archivos.

public class FileSystemListener implements FileSystemJournalListener, Runnable {
       /** The last USN to have to search until, when looking for new files added to the file system */
       private long _lastUSN;
       /** The filename of the new image */
       private String _imageFilename;

       public void run() {
          // TODO: do something with the new image
       }

       public FileSystemListener() {
          // we record the next system USN before the Camera app has a chance to add a new file
          _lastUSN = FileSystemJournal.getNextUSN();
       }

       public void fileJournalChanged() {
          long nextUSN = FileSystemJournal.getNextUSN();
          boolean imgFound = false;
          // we have to search for the file system event that is the new image
          for (long lookUSN = nextUSN - 1; (lookUSN >= _lastUSN) && !imgFound; --lookUSN) {
             FileSystemJournalEntry entry = FileSystemJournal.getEntry(lookUSN);
             if (entry == null) {
                break;
             } else {
                String path = entry.getPath();
                if (path != null) {
                   if (path.endsWith("png") || path.endsWith("jpg") || path.endsWith("bmp") || path.endsWith("gif")) {
                      switch (entry.getEvent()) {
                         case FileSystemJournalEntry.FILE_ADDED:
                            // either a picture was taken or a picture was added to the BlackBerry device
                            _lastUSN = lookUSN;
                            _imageFilename = path;
                            imgFound = true;

                            // unregister for file system events?
                            UiApplication.getUiApplication().removeFileSystemJournalListener(this);

                            // let this callback complete before responding to the new image event
                            UiApplication.getUiApplication().invokeLater(this);
                            break;
                         case FileSystemJournalEntry.FILE_DELETED:
                            // a picture was removed from the BlackBerry device;
                            break;
                      }
                   }
                }
             }
          }
       }
    }

contestado el 25 de mayo de 12 a las 23:05

Gracias. ¿Puede el código anterior detectar las imágenes agregadas en la tarjeta SD? o solo rastrea los cambios en el sistema de archivos de la memoria interna? - user1407894

@user1407894, Sí, el código anterior puede detectar imágenes añadidas a la tarjeta SD. Acabo de ejecutar la aplicación que construí que usa este código para probarla. Funciona para el almacenamiento interno o la tarjeta SD. Obviamente, los caminos serán diferentes para esas dos ubicaciones (String path =). Pero sí, detecta archivos en la tarjeta multimedia. - Nate

gracias amigo :) lo comprobará ahora. - user1407894

@usuario1407894. No hay problema. También señalaré que mi código anterior solo encuentra una imagen. Después de encontrar la nueva imagen, deja de escuchar más eventos del sistema de archivos. Esto era correcto para mi aplicación, pero podría no serlo para la tuya. De todos modos, puedes borrar mi llamada a removeFileSystemJournalListener si quieres que tu app siga esperando más imágenes. - Nate

Gracias por tu valioso comentario :) - user1407894

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.