2011-01-14 9 views
6

Problema:mejor método para el fondo cargador en Android

Quiero escribir un proceso que permitirá a un usuario tomar fotos con el dispositivo y para esas fotos que se cargan a continuación a algún oyente en la nube. El usuario no debería tener que hacer nada para iniciar la carga, un oyente de fondo simplemente miraría la carpeta y mientras encuentre archivos en ella, los cargaría y los eliminaría.

dos problemas: 1) cómo mantener el programa que se ejecuta en segundo plano, incluso después de que el usuario ya no está tomando fotografías (y si se reinicie el dispositivo para que se despierte y terminar las subidas, si queda alguna pendiente)

2) suponiendo que la conexión es irregular (como siempre lo es) cómo verificar que una imagen dada ha completado su carga, y si no, volver a enviarla.

No necesito ningún ejemplo de código, solo me gustaría obtener opiniones sobre la mejor estrategia para implementarlo.

Iba a usar Apache commons y solo subir a un PHP, pero no estoy seguro de qué tipo de comprobación de errores existe para tener en cuenta un archivo de conexión a la mitad.

TIA.

Respuesta

8

Habiendo escrito esencialmente esta aplicación varias veces en varias plataformas, les puedo decir que no es una tarea trivial. Para abordar el primer problema, puede crear un servicio que se encuentre en segundo plano y realice sus cargas. Para que se inicie automáticamente, puedes declarar que recibe el intento android.intent.action.BOOT_COMPLETED en tu manifiesto (necesitarás el permiso android.permission.RECEIVE_BOOT_COMPLETED para poder usarlo). Si va a escuchar cosas escritas por la aplicación de cámara estándar, puede usar registerContentObserver para escuchar cosas nuevas. ¡Cuidado, los teléfonos pueden tener más de un lugar donde guardan fotos!

Para el segundo problema, haga que su servicio web devuelva información sobre la finalización de la carga que su cliente puede utilizar para decidir sobre los intentos.

+0

consejo fabulosamente útil ... Probablemente te dé la marca de verificación, pero la dejaré abierta un poco para ver si alguien más responde algo que se me ocurre (la gente generalmente deja de atender una pregunta que ha sido respondida) En cuanto a dónde se escriben los archivos, iba a escribir los archivos yo mismo en la tarjeta SD ... ¿eso va a presentar un problema? –

+2

"Para resolver el primer problema, puede crear un servicio que se encuentre en segundo plano y realice sus cargas". - Sin embargo, definitivamente NO quieres diseñar esto de modo que se suponga que el servicio debe vivir para siempre. Use un 'IntentService', de modo que la carga se produzca en un hilo de fondo (obligatorio) y para que el servicio se cierre automáticamente cuando ya no haya más cargas. Use 'startService()' para enviar el comando al 'IntentService' para que inicie la carga. – CommonsWare

+0

Sí, mil veces sí al IntentService. No creería la cantidad de formas en que puede atornillar algo como esto si trata de administrar su operación de fondo usted mismo. – jjb

4

Quiero escribir un proceso que permitir a un usuario tomar fotos con el dispositivo y que esas fotos a continuación se subido a algún oyente en la nube .

favor, ya sea iniciado la toma de fotografías a sí mismo (para saber cuándo es el momento de cargar) o crear un ACTION_SENDActivity para conectar a la opción Compartir de la aplicación de la cámara, por lo que el usuario puede cargar de esa manera.

El usuario no debería tener nada que ver para iniciar la carga, un oyente fondo sería simplemente ver la carpeta y el tiempo que se encuentra archivos en ella sería subirlos y eliminarlos.

No, por favor.

Una gran queja entre los usuarios de Android son las aplicaciones escritas con este tipo de técnica: algunos "escuchas de fondo" que están ocupando la memoria RAM y sin entregar ningún valor el 99.999% del tiempo. El equipo principal de Android se ha visto obligado a modificar el sistema operativo para evitar que los desarrolladores arruinen los teléfonos de los usuarios de esta manera.Las versiones más recientes de Android terminarán su "escucha de fondo" después de un tiempo. Los usuarios pueden finalizar su "escucha de fondo" antes que eso, utilizando un "asesino de tareas" o la pantalla Administrar servicios en la aplicación de Configuración.

Inicie la toma de fotografías usted mismo (para saber cuándo es hora de cargarla) o cree ACTION_SENDActivity para conectarla a la opción Compartir de la cámara, de modo que el usuario pueda cargarla de esa manera.

+0

Un par de comentarios: primero, tomar la fotografía usted mismo no le permitirá tomar una foto de resolución completa en todos los teléfonos, a pesar de los documentos. En algunos teléfonos, le ofrece una imagen de calidad reducida sin importar lo que haga. En cuanto a la operación en segundo plano, es absolutamente necesario tener una configuración para que los usuarios puedan desactivar el agente de escucha de contenido, o bien (con razón) recibirán muchas quejas al respecto. – jjb

+0

@jjb: "En algunos teléfonos, le da una imagen de calidad reducida sin importar lo que haga": ¿tiene una lista de dispositivos afectados? – CommonsWare

+0

Me temo que no tengo acceso a las notas que hemos hecho en diferentes modelos, ya que no estoy más tiempo con esa compañía. Me parece recordar las variadas variantes de héroe que lo hacen, junto con el Eris. Es posible que el Evo 4G estuviera entre ese grupo, parecía ser un problema con SenseUI. Es posible que, como ya no estoy trabajando activamente en esa aplicación, haya sido corregido en versiones más recientes de SenseUI, no pueda responder a eso. Pero pensé que sería interesante plantearlo como un problema potencial. Ah, otra peculiaridad divertida por teléfono: algunos teléfonos pondrán su imagen en la galería, incluso si ... – jjb

Cuestiones relacionadas