iOS - [設定] > [プライバシー] > [モーション アクティビティ] でモーション アクティビティが有効になっていますか

StackOverflow https://stackoverflow.com//questions/21005990

  •  20-12-2019
  •  | 
  •  

質問

アプリがアクセスを必要とする場合 Motion Activity インストール時にユーザーに要求するデータ。ただし、ユーザーが誤って「いいえ」と答えた場合、アプリは機能しません。

モーション アクティビティが有効になっているかどうかを確認し、有効になっていない場合は有効にするようにユーザーに促す方法を探しています。

誰かがコード的に正しい方向を教えてくれませんか?


Doc からの情報 (ありがとう) によると、Apple はステータスを確認する直接的な方法を提供していないようです。 Motion Activity プライバシーで。エラーを見つけて調べることができました:-

[stepCounter queryStepCountStartingFrom:[NSDate date]
                                     to:[NSDate date]
                                toQueue:[NSOperationQueue mainQueue]
                            withHandler:^(NSInteger numberOfSteps, NSError *error) {
                                if (error != nil && error.code == CMErrorMotionActivityNotAuthorized) {
                                    // The app isn't authorized to use motion activity support.
}
役に立ちましたか?

解決

iOS 11 の新機能、CMSSensorRecorder には、と呼ばれる静的メソッドがあります。 認証ステータス それを取得するために。

+ (CMAuthorizationStatus)authorizationStatus;

他のヒント

Appleはサンプルプロジェクトさまざまな権限(モーションアクティビティを含む)のアクセスを確認して要求する方法を示しています。.html#// apple_ref / doc / uid / dts40013410 ">ここ。私はあなたがそれを簡単に見ることをお勧めします - それはかなり簡単です。

New、CMSensorRecorder doc link )は、アプリがモーションとフィットネスの許可されているかどうかを確認するためのクラスメソッドを持っています:

  • SWITFT class func isAuthorizedForRecording() -> Bool
  • Objective-C + (BOOL)isAuthorizedForRecording

これはどうですか?

- (void)checkMotionAuth {
    switch ([CMMotionActivityManager authorizationStatus])
    {
        case CMAuthorizationStatusNotDetermined:
        {
            CMMotionActivityManager *manager = [[CMMotionActivityManager alloc]init];
            [manager queryActivityStartingFromDate:[NSDate date]
                                            toDate:[NSDate date]
                                           toQueue:[NSOperationQueue mainQueue]
                                       withHandler:^(NSArray<CMMotionActivity *> * _Nullable activities, NSError * _Nullable error) {

                                           if ([CMMotionActivityManager authorizationStatus] == CMAuthorizationStatusAuthorized)
                                           {
                                               NSLog(@"Authorized");
                                           }
                                           else
                                           {
                                               NSLog(@"Denied");
                                           }
                                       }];
        }
            break;
        case CMAuthorizationStatusRestricted:
        case CMAuthorizationStatusDenied:
        {
            NSLog(@"Denied/Restricted");
        }
            break;
        case CMAuthorizationStatusAuthorized:
        {
            NSLog(@"Authorized");
        }
        default:
            break;
    }
 }
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top