Slik spiller en lyd ved hjelp AVAudioPlayer når du er i stille modus i iPhone

stemmer
15

Jeg ønsker å spille av en lyd, selv i stille modus i iPhone.

Kan det gjøres ved hjelp AVAudioPlayer (Uten å bruke AVAudioSession)

(For ios 3.0+)

Takk på forhånd.

Publisert på 25/04/2012 klokken 16:56
kilden bruker
På andre språk...                            


5 svar

stemmer
27

Egentlig kan du gjøre dette. Den styres via Audio Session og har ingenting å gjøre med AVAudioPlayerseg selv. Hvorfor ønsker du ikke å bruke AudioSession? De spiller fint sammen ...

I programmet ditt, bør du initialisere Audio Session, og deretter kan du også fortelle indikere hva slags lyd du har tenkt å spille. Hvis du er en musikkspiller, så er det liksom er fornuftig at brukeren ønsker å høre lyden selv med ring / lydløs-bryteren aktivert .

    AudioSessionInitialize (NULL, NULL, NULL, NULL);
    AudioSessionSetActive(true);

    // Allow playback even if Ring/Silent switch is on mute
    UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
    AudioSessionSetProperty (kAudioSessionProperty_AudioCategory, 
                             sizeof(sessionCategory),&sessionCategory);

Jeg har en app som jeg gjør dette svært ting, og bruker AVAudioPlayer å spille av lyd, og med ring / lydløs-bryteren er aktivert, kan jeg høre lyden.

OPPDATERING (11/6/2013)

I programmet jeg nevnte ovenfor, der jeg brukte koden ovenfor vellykket, jeg har (for en stund) vært ved hjelp av følgende kode i stedet for å oppnå samme resultat:

        AVAudioSession * audioSession = [AVAudioSession sharedInstance];
        NSError * error = null;
        BOOL resultat = NR;
        if ([audioSession respondsToSelector: @selector (setActive: withOptions: feil :)]) {
            Resultatet = [audioSession setActive: JA withOptions: 0 error: & feil]; // iOS6 +
        } Else {
            [AudioSession setActive: JA withFlags: 0 error: & feil]; // iOS5 og under
        }
        if (! resultat && feil) {
            // avtale med feil
        }

        error = null;
        Resultatet = [audioSession setCategory: AVAudioSessionCategoryPlayback error: & error];

        if (! resultat && feil) {
            // avtale med feil
        }

Jeg tenkte jeg skulle legge dette som et alternativ, i lys av den siste kommentaren til dette svaret. :-)

Svarte 25/04/2012 kl. 17:44
kilden bruker

stemmer
23

MarkGranoff løsning er riktig. Men hvis du foretrekker å gjøre det i Obj-c i stedet for C, er følgende verk også:

    NSError *error = nil;
    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&error];
    [[AVAudioSession sharedInstance] setActive:YES error:&error];
Svarte 12/10/2012 kl. 22:35
kilden bruker

stemmer
4

De ovennevnte svarene er riktige. Følgende er Swift versjon.

do {
    try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
    //print("AVAudioSession Category Playback OK")
    do {
        try AVAudioSession.sharedInstance().setActive(true)
        //print("AVAudioSession is Active")
    } catch _ as NSError {
        //print(error.localizedDescription)
    }
} catch _ as NSError {
    //print(error.localizedDescription)
}
Svarte 17/06/2016 kl. 05:30
kilden bruker

stemmer
0

Dette vil bare gjøre triks (hjelp AVAudioSession)

try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
try AVAudioSession.sharedInstance().setActive(true)
Svarte 13/02/2018 kl. 06:34
kilden bruker

stemmer
0

Swift 4 enkel versjon:

try? AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [])
Svarte 27/02/2019 kl. 14:43
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more