2016-10-27 7 views
0

CMMotionActivityManagerstartActivityUpdatesToQueueをバックグラウンドで使用しようとしています。Core Motionは承認/ .plist情報を必要としますか?

 if CMMotionActivityManager.isActivityAvailable() { 
      CMMotionActivityManager().startActivityUpdatesToQueue(NSOperationQueue.mainQueue(), withHandler: { (activity: CMMotionActivity?) in 
       if (activity?.automotive)! { 
        let notification = UILocalNotification() 
        notification.alertTitle = "Arounder" 
        notification.alertBody = "User using car" 
        notification.soundName = "Notification Sound" 
        notification.category = "category" 

        UIApplication.sharedApplication().scheduleLocalNotification(notification) 

        print(notification.alertBody) 
       } else if (activity?.cycling)! { 
        let notification = UILocalNotification() 
        notification.alertTitle = "Arounder" 
        notification.alertBody = "User is cycling" 
        notification.soundName = "Notification Sound" 
        notification.category = "category" 

        UIApplication.sharedApplication().scheduleLocalNotification(notification) 
        print(notification.alertBody) 
       } else if (activity?.walking)! || (activity?.running)! { 
        let notification = UILocalNotification() 
        notification.alertTitle = "Arounder" 
        notification.alertBody = "User is walking/running" 
        notification.soundName = "Notification Sound" 
        notification.category = "category" 

        UIApplication.sharedApplication().scheduleLocalNotification(notification) 
        print(notification.alertBody) 
       } else if (activity?.stationary)! { 
        let notification = UILocalNotification() 
        notification.alertTitle = "Arounder" 
        notification.alertBody = "User is standing" 
        notification.soundName = "Notification Sound" 
        notification.category = "category" 

        UIApplication.sharedApplication().scheduleLocalNotification(notification) 
        print(notification.alertBody) 
       } else if (activity?.unknown)! { 
        let notification = UILocalNotification() 
        notification.alertTitle = "Arounder" 
        notification.alertBody = "Unknown activity" 
        notification.soundName = "Notification Sound" 
        notification.category = "category" 

        UIApplication.sharedApplication().scheduleLocalNotification(notification) 
        print(notification.alertBody) 
       } 
      }) 
     } 

は私がCore LocationrequestAlwaysAuthorization)のように、ユーザからの許可を取得する必要があります:

しかし、動作するようには思えない、私はこのコードを追加する以外に行う必要があり、追加のものがありますか? .plistファイルがありますか?

ありがとうございます!

答えて

0

CMMotionActivityManagerは、アプリがバックグラウンド(一時停止中)の場合に更新を配信しません。 documentationから:

ハンドラブロックはベストエフォートベースで実行され、アプリケーションが中断されている間は更新が配信されません。あなたのアプリが中断されている間にアップデートが到着した場合、最後のアップデートは実行を再開するとあなたのアプリに配信されます。あなたのアプリケーションが一時停止中に発生したすべての更新を取得するには、queryActivityStarting(from:to:to:withHandler :)メソッドを使用します。あなたのアプリは定期的にバックグラウンド実行を再開し、活動の更新を取得する機会を取る持っている、そのような重要な場所の変更モードとして、他のいくつかのバックグラウンドモードを使用しますが、独自の意志のモーションタイプの変更ができ

あなたのアプリが中断からバックグラウンドでの実行に移行することはありません。

+0

この答えを見て、彼はあなたがバックグラウンドで活動を得ることができると言った:http://stackoverflow.com/questions/40238591/is-it-possible-to-detect-the-users-moving-activity-on -the-background/40239325#40239325間違っていますか? –

+0

その答えは基本的に私と同じです。アプリを実行させるための位置情報の更新など、他のバックグラウンドモードを使用する必要があります。このバックグラウンド実行を利用して、モーションアクティビティの更新を受け取ることができます。あなた自身のアクティビティを変更してもアプリが停止からバックグラウンドに実行されることはありません – Paulw11

+0

ああ、私は少しはっきりさせておきます:私のアプリでは、地域監視をしています。私が 'didEnterRegion'メソッドに追加したコードを呼び出しています。これは大丈夫ですか? –

関連する問題