2013-10-07 2 views
21

새로운 모션 활동 관리자 API (CMMotionActivityManager)를 테스트했습니다. 앱이 포 그라운드에서 실행되지 않는 동안 startActivityUpdatesToQueue에서 모션 업데이트를 수신하고 처리 할 수있는 앱을 만들고 싶습니다. 앱이 포 그라운드에있는 동안 모션 업데이트 (고정, 걷기, 실행, 자동차, 알 수 없음)를 올바르게 수신하지만 배경에 들어가 자마자 정지 상태가되는 순간 모션 업데이트는 앱에서 중단됩니다.CMMotionActivityManager - 앱이 일시 중지 또는 백그라운드에서 모션 활동 업데이트를 수신합니다.

CMMotionActivityManager Class Reference :.. "은이 방법이 메소드를 호출하면 비동기 동작 데이터의 추적을 개시하고, 모션 활동 관리 장치에 적용되는 현재 움직임을보고, 특정 큐 처리기 블록을 실행하고 그 후, 모션 액티비티 관리자는 모션 데이터가 변경 될 때만 핸들러 블록을 실행합니다. 핸들러 블록은 최선의 노력으로 실행되며 앱이 일시 중지 된 동안에는 업데이트가 전달되지 않습니다. 앱이 일시 중지 된 동안 업데이트가 도착하면 마지막 업데이트가 전달됩니다. 앱이 일시 중지 된 동안 발생한 모든 업데이트를 받으려면 queryActivityStartingFromDate:toDate:toQueue:withHandler: 메서드를 사용하십시오. "

내 앱을 백그라운드에서 실행하고 모션 데이터 (실시간)를 수신하는 방법을 원합니다. 현재 백그라운드에서 앱을 실행하는 유일한 방법은 백그라운드 서비스를 사용하는 것입니다. 그러나 허용 된 백그라운드 서비스 목록에 '모션 업데이트'가 없습니다.

App Store Review Guidelines : "멀티 태스킹 응용 프로그램은 의도 한 용도로만 백그라운드 서비스를 사용할 수 있습니다 목적 : VoIP, 오디오 재생, 위치, 작업 완료, 지역 알림 등 " 배터리를 절약하기 위해 항상 위치 업데이트 (GPS)를하고 싶지 않습니다. 계속해서 위치 업데이트를하고 있지만 GPS를 끄면 앱이 일시 중지됩니다.

백그라운드에서 실행중인 앱을 유지하고 모션 활동 업데이트를받는 방법을 알려주세요. 방법이 있어야합니다 : Strava 앱을 사용해 보았습니다 ... 앱이 백그라운드에 있더라도 사용자가 일시 중지하면 GPS가 전환됩니다. 사용자가 달리기를 다시 시작하면 GPS가 자동으로 켜지 며 (앱이 백그라운드에서 실행되는 동안) ... 이는 앱이 백그라운드에서 실행 중이며 GPS가 꺼져있는 동안에도 모션 활동 업데이트를 적극적으로 수신하고 있음을 의미합니다.

미리 감사드립니다.

+0

@Jackson 어떤 해결책이나 대안을 찾았습니까? –

+0

@AshokKumarS 사실은 아니지만 아래의 답변에 대한 설명이 나와 있습니다. 앱을 만들어야합니다. 다른 수단을 통해 백그라운드에서 실행하고 평소처럼 Core Motion을 사용하십시오. – Jackson

답변

2

이것은 새로운 문제는 아닙니다. Core Motion 배경 사용 설정이 없습니다. 앱이 백그라운드에서 실행 중이지만 백그라운드에서 실행되도록하려면 Core Motion을 사용할 수 있습니다 (예 : 사용자가 앱을 백그라운드로 보내면 위치 업데이트를 받고, location 백그라운드 서비스가 Info.plist에 있습니다.

올바른 하드웨어를 사용하고 있다면 백그라운드에서 주기적으로 앱을 깨우기 위해 지연된 위치 업데이트를 사용할 수 있습니다. 따라서 전원을 절약 할 수 있습니다. 앱이 백그라운드에서 Info.plist 백그라운드 서비스 목록없이 실행될 수 있습니다.

+0

명확히하려면 예를 들어 didFinishLaunchingWithOptions에서 startActivityUpdatesToQueue를 사용 설정하고 앱이 백그라운드로 들어갈 때 startUpdatingLocation을 호출하면 백그라운드에서 위치 업데이트가 activityUpdate를 트리거한다는 의미입니까? 또는 locationManager에 startActivityUpdatesToQueue를 넣으라고 말하고 있습니까? didUpdateLocations :?Tx – Spectravideo328

+0

@ Spectravideo328 단순히 백그라운드를 실행하지 않는 한 앱이 백그라운드에서 실행되고 있지 않다는 것입니다. 코어 모션을 사용하는 것만으로는 그렇게 할 수 없습니다. – matt

+0

감사합니다. 따라서 .plist 백그라운드 모드에서 위치 업데이트를 나열하는 것만으로는 충분하지 않습니다. 앱은 실제로 백그라운드에서 (그리고 locationManager : didUpdateLocations를 반환하면서) 위치를 업데이트해야합니다. 그리고 앱이 백그라운드에서 돌아가고 있기 때문에 coremotion이 따라 붙을 것입니까? 옳은? – Spectravideo328

관련 문제