Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

iOS 8 custom alarm using uilocalnotification and playing sound in background when phone is on silent

I am trying to build a custom alarm application. But the challenge I am facing is getting the sound played while app is in the background.

First method, UILocalNotification,

According to the Apple programming guidelines, the right way to make an alarm is

- (void)scheduleAlarmForDate:(NSDate*)theDate
{
    UIApplication* app = [UIApplication sharedApplication];
    NSArray*    oldNotifications = [app scheduledLocalNotifications];

    // Clear out the old notification before scheduling a new one.
    if ([oldNotifications count] > 0)
        [app cancelAllLocalNotifications];

    // Create a new notification.
    UILocalNotification* alarm = [[UILocalNotification alloc] init];
    if (alarm)
    {
        alarm.fireDate = theDate;
        alarm.timeZone = [NSTimeZone defaultTimeZone];
        alarm.repeatInterval = 0;
        alarm.soundName = @"alarmsound.caf";
        alarm.alertBody = @"Time to wake up!";

        [app scheduleLocalNotification:alarm];
    }
}

Problem is,

  • if the user has the phone on silent, the notification sound will only be a small vibrate that doesn't suffice for a alarm.

  • Idealy, I want a alarm that will go off no matter the phone is on silent or normal to wake up the user.

Second way I can think of, AVAudioSession

  • But when the region is near or alarm trigger comes in, audioSession cannot be initiated in the background so any audioPlayer.play() methods won't do anything.

Besides the above 2 methods that both don't work, I can't seem to find any other ways to tackle the problem at hand.

I am trying to make an App which is a location based alarm.

  • I can set a region and custom sound for 30 seconds on my UILocalNotification but the sound won't play if phone is silent.

  • I can have a locationManager monitoring my region but I can't play a sound after I get notified from the background.

I've downloaded many Apps that are capable of doing this so I know there must be way of achieving it. However, after multiple tries in various angles, I can't seem to find any good solutions. If anyone had experience with making a custom alarm, please share some tips and pointers if you can.

Thank you.

like image 508
Jacky Wang Avatar asked Oct 31 '22 04:10

Jacky Wang


1 Answers

Since my reputation is not enough to comment everywhere, I would write it here as an answer. Sorry about this.

I'm also suffering with the same problem. Though I cannot give you a solution, there might be some hints to you. To me, I think it might be impossible to achieve.

I have double checked two alarm application I use: Sleep Cycle and UNIQLO Wake Up. And I found out that these two applications asked you to keep it always running on the foreground to make sure that the alarm clock will work. Especially UNIQLO Wake Up, it will show you an alert when you save the alarm clock, telling you that press Home button may cause the alarm clock not working.

There is a post asking about similar question, and the author provide some names of the applications: How do I start playing audio when in silent mode locked in iOS 6. I checked the application called WaveAlarm. Similarly, if the cellphone is in mute mode and you put it into background, only UILocalNotification will work. This means, no sound will be played in this situation. If your cellphone is still in the mute mode, but you keep the application in the foreground, it will play a sound. The volume of the sound depends on the volume you set for video playing.

So to me, I think it might impossible to play alarm sound when you put the application into background and set the cellphone into mute mode. I guess the most possible way to achieve this is to ask users to keep it in foreground, and play a media with the alarm sound.

I'll try to achieve this function in these two days. If I have some other understandings, I'll edit this post here.

like image 189
Yuting Avatar answered Nov 13 '22 23:11

Yuting