2011-08-01 17 views
7

Próbuję utworzyć aplikację alarmową, ale nie wiem, jak ustawić utwór z iTunes na dźwięk powiadomienia lokalnego.Jak ustawić lokalne powiadomienie dźwiękowe z utworu w iTunes?

Teraz używam tego kodu, aby wywołać iTunes

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (indexPath.section == 0) { 
     MPMediaPickerController *picker = [[MPMediaPickerController alloc] initWithMediaTypes: MPMediaTypeMusic]; 

     picker.delegate = self; 
     picker.allowsPickingMultipleItems = NO; 
     picker.prompt = NSLocalizedString (@"Select any song from the list", @"Prompt to user to choose some songs to play"); 

     //[self presentModalViewController: picker animated: YES]; 
     [self.navigationController pushViewController:picker animated:YES]; 

     NSLog(@"gsudifghukdsf"); 
     [picker release]; 

    } 
} 

- (void) mediaPicker: (MPMediaPickerController *) mediaPicker didPickMediaItems: (MPMediaItemCollection *) mediaItemCollection 
{ 
    [self.navigationController popToRootViewControllerAnimated:YES]; 
    //[self dismissModalViewControllerAnimated: YES]; 
    NSLog(@"%@",mediaItemCollection); 

    UILocalNotification *local = [[UILocalNotification alloc] init]; 
    //selectedSongCollection=mediaItemCollection; 

} 

- (void) mediaPickerDidCancel: (MPMediaPickerController *) mediaPicker 
{  
    [self.navigationController popToRootViewControllerAnimated:YES]; 
    //[self dismissModalViewControllerAnimated: YES]; 
} 

i coś o wyglądzie powiadomień lokalnym jak ta

UILocalNotification *localNotif = [[UILocalNotification alloc] init]; 
    if (localNotif == nil) 
    { //NSLog(@"Get in if localNotif"); 
     return; 
    } 

    localNotif.fireDate = DateAlarm; 

    localNotif.timeZone = [NSTimeZone defaultTimeZone]; 

    // Notification details 
    localNotif.alertBody = [NSString stringWithFormat:@"%@",DateAlarm]; 
    // Set the action button 
    localNotif.alertAction = @"Oh Shit"; 



    localNotif.soundName = UILocalNotificationDefaultSoundName; 

Więc proszę kierować mi jak mogę ustawić utwór do lokalnego dźwięku ??

+0

Poprowadź mnie proszę. Lub nie może zrobić? – crazyoxygen

+0

Sprawdź za pomocą tego adresu URL http://www.techotopia.com/index.php/Scheduling_iOS_4_iPhone_Local_Notifications#Adding_a_Sound_File_to_the_Project –

Odpowiedz

9

Można używać tylko dźwięków wchodzących w skład głównego pakietu, co oznacza, że ​​zostały umieszczone w aplikacji po przesłaniu do sklepu z aplikacjami.

Tak, możesz nagrywać dźwięk, pobierać dźwięk, itp. W aplikacji, ale nie można używać żadnego z tych plików dźwiękowych stworzonych/zapisanych, ponieważ nie ma ich w pakiecie aplikacji. Jeśli aplikacja używa niestandardowych dźwięków, uzyskując dostęp do nich poza pakietem, to używają prywatnych interfejsów API, aby to zrobić. Zaufaj mi, próbowałem każdej opcji, o której mogę pomyśleć.

+0

Widziałem aplikacje robiące dokładnie to. przykład, [Rise] (https://itunes.apple.com/us/app/rise-alarm-clock/id577221529) Każdy pomysł, jak to robią? Wygląda na to, że wykonują trochę przetwarzania dźwięku, ale nie jestem pewien. – r3dsm0k3

+0

Nie jestem pewien, jak to robią. Bieżący numer referencyjny klasy UILocalNotification (http://developer.apple.com/library/ios/#documentation/iPhone/Reference/UILocalNotification_Class/Reference/Reference.html) i [Podręcznik programowania powiadomień lokalnych i wypychanych] (http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/IPhoneOSClientImp.html # // apple_ref/doc/uid/TP40008194-CH103) oba nadal mówią, że możesz to zrobić tylko z dźwiękiem w Main Bundle. Tak więc, jeśli nie znaleźli sposobu, żeby wbić dźwięki w Main Bundle, nie mam pojęcia. :( – thephatp

2

Jak zauważono w @thephatp, powiadomienie (lokalne lub zdalne) może powodować tylko odtwarzanie dźwięków znajdujących się w pakiecie aplikacji. Nie widzę żadnego sposobu obejścia tego.

@ r3dsm0k3 pyta w swoim komentarzu, w jaki sposób aplikacje takie jak Rise wywołują odtwarzanie dźwięków, które nie znajdują się w pakiecie aplikacji. If I had to guess, I would say that Rise registers itself as an app requiring the audio background mode:

Deklarowanie obsługiwanych zadań w tle swoją aplikację za

Wsparcie dla niektórych rodzajów egzekucji tle muszą być zadeklarowane w wcześniej przez aplikację, która ich używa. Aplikacja deklaruje obsługę usługi przy użyciu pliku Info.plist. Dodaj klucz UIBackgroundModes do pliku Info.plist i ustawić jej wartość do tablicy zawierającej jeden lub więcej z następujących ciągów:

audio-Aplikacja odtwarza słyszalny treści do użytkownika podczas w tle. (Ta zawartość obejmuje strumieniową zawartość audio lub wideo przy użyciu AirPlay.)

To skutecznie oznacza, że ​​Rise może pozostać uruchomiony przez cały czas. Zezwala się na to, ponieważ odtwarza dźwięk w imieniu użytkownika. To, że nie odtwarza dźwięku w 100%, nie wydaje się być problemem dla Apple.

Wzrost może, ale nie musi, używać UILocalNotifications. Najprawdopodobniej używają ich tylko jako kopii zapasowej, gdy aplikacja rozładowuje się, a zamiast tego używa innego mechanizmu zegara, aby uruchomić sekwencję alarmową budzenia.

Powiązane problemy