4

IOS で加速度計を使用していますが、バックグラウンド モードで実行したいと考えています。

私はCMMotionManagerこのように使用しようとしましたが、うまくいきませんでした:

CMMotionManager*manager= [[CMMotionManager alloc] init];
if(!manager.accelerometerAvailable) {
    NSLog(@"Accelerometer not available");
} else {
    manager.accelerometerUpdateInterval = 0.1;
    NSOperationQueue *motionQueue = [[NSOperationQueue alloc] init];

    [manager startAccelerometerUpdatesToQueue: motionQueue withHandler:
     ^(CMAccelerometerData *data, NSError *error) {
         NSLog(@"Accelerometer data: %@", [data description]);
     }
     ];
}

これどうやってするの?

4

1 に答える 1

1

これで問題が解決するかどうかはわかりませんが、ドキュメント ( http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html ) を見ると、次のように書かれています。

"長時間実行されるバックグラウンド タスクの実装

実装するのにより多くの実行時間を必要とするタスクについては、特定のアクセス許可を要求して、一時停止せずにバックグラウンドで実行する必要があります。iOS では、特定の種類のアプリのみがバックグラウンドで実行できます。

  1. 音楽プレーヤー アプリなど、バックグラウンドでユーザーに可聴コンテンツを再生するアプリ

  2. ナビゲーション アプリなど、常にユーザーに現在地を知らせるアプリ

  3. Voice over Internet Protocol (VoIP) をサポートするアプリ

  4. 新しいコンテンツをダウンロードして処理する必要がある Newsstand アプリ

  5. 外部アクセサリから定期的にアップデートを受信するアプリ

これらのサービスを実装するアプリは、サポートするサービスを宣言し、システム フレームワークを使用してそれらのサービスの関連する側面を実装する必要があります。サービスを宣言することで、システムはどのサービスを使用しているかを知ることができますが、場合によっては、アプリケーションの中断を実際に防いでいるのはシステム フレームワークです。」

加速度計を使用してこれらのことを実行しようとしているかどうかはわかりませんが (おそらく、Bluetooth デバイスと通信しますか?)、その場合は、アプリでサポートするサービスを宣言する必要があります。これを行うには、UIBackgroundModes キーを Info.plist に追加してから、使用しようとしているサービスに関連する文字列を含む配列を追加する必要があります。文字列の完全なリストについては、上記のリンク先のドキュメント ページを参照してください。

加速度計を使用してこれらのことを実行しようとしていない場合は、運が悪いように見えます。私はそこで間違っていたいのですが..(誰か?)

于 2013-03-01T04:09:31.737 に答える