ios7 core-motion

ios7 - CMMotionActivityManager-Recibir actualizaciones de actividad de movimiento mientras la aplicación está suspendida o en segundo plano



core-motion (1)

He estado probando las nuevas API de Motion Activity Manager ( CMMotionActivityManager ). Quiero crear una aplicación que pueda recibir y procesar actualizaciones de movimiento desde startActivityUpdatesToQueue mientras la aplicación no se ejecuta en primer plano. Recibo correctamente las actualizaciones de movimiento (estacionarias, caminando, corriendo, automotriz, desconocido) mientras la aplicación está en primer plano, pero tan pronto como entra en segundo plano (y, por lo tanto, se suspende), las actualizaciones de movimiento dejan de ser recibidas por la aplicación.

CMMotionActivityManager Referencia de clase : "Este método inicia el seguimiento de los datos de movimiento de forma asíncrona. Al llamar a este método, el administrador de actividad de movimiento ejecuta el bloque del controlador en la cola especificada, informando el movimiento actual en vigor para el dispositivo. Después de eso, el administrador de actividad de movimiento ejecuta el bloqueo del controlador solo cuando los datos de movimiento cambian. El bloqueo del controlador se ejecuta con el mejor esfuerzo posible y las actualizaciones no se entregan mientras se suspende su aplicación. Si las actualizaciones llegaron mientras su aplicación se suspendió, la última actualización se entrega a su aplicación cuando reanuda la ejecución. Para obtener todas las actualizaciones que se produjeron mientras se suspendía la aplicación, use el queryActivityStartingFromDate:toDate:toQueue:withHandler: method ".

Quiero una forma de mantener mi aplicación en segundo plano y recibir datos de movimiento (en tiempo real). En este momento, la única forma de mantener la aplicación ejecutándose en segundo plano es utilizar servicios en segundo plano, pero las "actualizaciones de movimiento" no se encuentran en la lista de servicios en segundo plano permitidos:

Pautas de revisión de App Store : "Las aplicaciones multitarea solo pueden usar servicios en segundo plano para los fines previstos: VoIP, reproducción de audio, ubicación, finalización de tareas, notificaciones locales, etc." No quiero tener actualizaciones de ubicación (GPS) todo el tiempo (para ahorrar batería). Si realizo actualizaciones continuas de ubicación pero apago el GPS, la aplicación se suspenderá.

Hágame saber cómo mantener mi aplicación en segundo plano y recibir actualizaciones de actividad de movimiento. Debe haber una forma de hacerlo: probé la aplicación Strava ... incluso cuando la aplicación está en segundo plano, apaga el GPS cuando el usuario hace una pausa en la ejecución. Cuando el usuario reanuda la ejecución, enciende automáticamente el GPS (todo esto mientras la aplicación está en segundo plano) ... esto probablemente significa que la aplicación se está ejecutando en segundo plano y está recibiendo actualizaciones activas de movimiento incluso cuando el GPS está apagado.

¡Gracias de antemano!


Esto no es un problema nuevo. Nunca ha habido una configuración de uso de fondo de Core Motion. Se le permite usar Core Motion si su aplicación se ejecuta en segundo plano, pero para que se ejecute en segundo plano debe hacer otra cosa (por ejemplo, obtener actualizaciones de ubicación en el momento en que el usuario envía la aplicación en segundo plano, y usted tener el servicio de fondo de location listado en su Info.plist.

Tenga en cuenta también que en iOS 7, si tiene el hardware adecuado, es posible que pueda utilizar las actualizaciones de ubicación diferida para activar la aplicación periódicamente en segundo plano. Por lo tanto, ahorra energía, pero su aplicación se ejecuta en segundo plano de vez en cuando sin una lista de servicios de fondo de Info.plist.