Как получить информацию о телефонных звонках
Мне нужно разработать мобильное приложение, которое отслеживает некоторую информацию о звонках, чтобы ограничить пользователей компании, проводящих слишком много времени с телефоном возле их ушей. Через x минут следует предложить использовать наушники.
1-й вопрос: возможно ли контролировать данные как это? Продолжительность телефонного звонка, время начала и окончания, если используются наушники, внутренний или внешний динамик... Я имею в виду, без использования джейлбрейка или других взломов.
2-й вопрос: возможно ли это сделать для IOS и Android?
3-й вопрос: знаете ли вы, есть ли у Ionic такая возможность?
Спасибо.
2 ответа
Для Android:
- Вы можете легко получить историю звонков или время входящих и исходящих звонков. Так что это возможно в Android.
Для iOS:
По вашему вопросу вы хотите ограничить текущее время звонка телефона возле их ушей.
Так что вы также делаете это в iOS с некоторой сообразительностью.
- В iOS 10 вводится новый фреймворк для вызова, т.е. CallKit.
- Во-первых, вы должны получить все контакты в вашем приложении.
- Поэтому пользователь должен позвонить из вашего приложения.
- Для набора номера также добавьте настраиваемую телефонную звонилку.
Некоторым методом callKit вы можете сделать:
Добавить наблюдателя звонка
@property (неатомный) CXCallObserver *callObserver;
Инициализируйте наблюдателя вызова:
(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 не предоставляют эту информацию, мы не можем ожидать этого от ионной платформы.