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 على طريقة ثابتة تسمى AuthorizationStatus لاسترجاعها.

+ (CMAuthorizationStatus)authorizationStatus;

نصائح أخرى

أبل لديها مشروع عينة يوضح كيفية التحقق وطلب الوصول لجميع الأذونات المتنوعة (بما في ذلك النشاط الحركي) هنا.أقترح عليك إلقاء نظرة سريعة على ذلك - إنه أمر واضح ومباشر.

الجديد في نظام iOS 9, CMSensorRecorder(رابط الوثيقة) لديه طريقة فئة للتحقق مما إذا كان تطبيقك معتمدًا للحركة واللياقة البدنية:

  • سويفت class func isAuthorizedForRecording() -> Bool
  • ج موضوعية + (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