iOS - [設定] > [プライバシー] > [モーション アクティビティ] でモーション アクティビティが有効になっていますか
-
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;
}
}
. 所属していません StackOverflow