Как получить информацию о телефонных звонках

Мне нужно разработать мобильное приложение, которое отслеживает некоторую информацию о звонках, чтобы ограничить пользователей компании, проводящих слишком много времени с телефоном возле их ушей. Через x минут следует предложить использовать наушники.

1-й вопрос: возможно ли контролировать данные как это? Продолжительность телефонного звонка, время начала и окончания, если используются наушники, внутренний или внешний динамик... Я имею в виду, без использования джейлбрейка или других взломов.

2-й вопрос: возможно ли это сделать для IOS и Android?

3-й вопрос: знаете ли вы, есть ли у Ionic такая возможность?

Спасибо.

2 ответа

Решение

Для Android:

  • Вы можете легко получить историю звонков или время входящих и исходящих звонков. Так что это возможно в Android.

Для iOS:

По вашему вопросу вы хотите ограничить текущее время звонка телефона возле их ушей.

Так что вы также делаете это в iOS с некоторой сообразительностью.

  • В iOS 10 вводится новый фреймворк для вызова, т.е. CallKit.
  • Во-первых, вы должны получить все контакты в вашем приложении.
  • Поэтому пользователь должен позвонить из вашего приложения.
  • Для набора номера также добавьте настраиваемую телефонную звонилку.

Некоторым методом callKit вы можете сделать:

  1. Добавить наблюдателя звонка

    @property (неатомный) CXCallObserver *callObserver;

  2. Инициализируйте наблюдателя вызова:

    • (instancetype) init {self = [super init]; if (self) {

          //Initialize the call observer
          _callObserver = [CXCallObserver new];
          [_callObserver setDelegate:self queue:dispatch_get_main_queue()];
      }
      return self;
      

      }

Добавьте делегата из комплекта вызова

#pragma mark - CXCallObserverDelegate
- (void)callObserver:(CXCallObserver *)callObserver callChanged:(CXCall *)call{
    [self callStateValue:call];
}

#pragma mark - Callkit State
- (void)callStateValue:(CXCall *)call {

    NSLog(@"Call UIID: %@", call.UUID);
    NSLog(@"hasEnded     %@", call.hasEnded? @"YES":@"NO");
    NSLog(@"isOutgoing   %@", call.isOutgoing? @"YES":@"NO");
    NSLog(@"isOnHold     %@", call.isOnHold? @"YES":@"NO");
    NSLog(@"hasConnected %@", call.hasConnected? @"YES":@"NO");

    if (call == nil || call.hasEnded == YES) {
        NSLog(@"CXCallState : Disconnected");
        [timer1 invalidate];
        NSLog(@"%ld",(long)self.duration);
        if(self.duration>1)
        self.duration=1;
    }

    if (call.isOutgoing == YES && call.hasConnected == NO) {
    }

    if (call.isOutgoing == NO  && call.hasConnected == NO && call.hasEnded == NO && call != nil) {
        self.duration = 0;
        NSLog(@"CXCallState : Incoming");
        NSLog(@"Call Details: %@",call);
    }

    if (call.hasConnected == YES && call.hasEnded == NO) {
        NSLog(@"CXCallState : Connected");
    timer1 = [NSTimer scheduledTimerWithTimeInterval:1.0 repeats:YES block:^(NSTimer * _Nonnull timer) {
        self.duration++;
        NSLog(@"%ld",(long)self.duration);
    }];

    }
}

Вы можете получить длительность, а также добавить условие. Через x минут следует предложить использовать наушники.

Отвечая на ваши вопросы:

Вопрос 1: Да, это возможно на Android. Это невозможно на iOS. В Android вы можете получить информацию о вызове, если пользователь разрешает. Вам не нужно делать джейлбрейк или что-то в этом роде. В то время как в iOS нет доступа к информации о вызовах.

Вопрос 2: Надеюсь, мой первый ответ сам ответит на это. i., e Android- возможно, iOS- невозможно

Вопрос 3: Ионная структура AFAIK предоставляет только основные сведения о продолжительности времени Телефонного звонка и структуре контактов. Вы должны изучить больше на Android, чтобы узнать. Даже если вы используете ионную платформу, вы вообще не можете получить доступ к этой информации на iPhone, так как нативные ios не предоставляют эту информацию, мы не можем ожидать этого от ионной платформы.

Другие вопросы по тегам