Hvordan begynner jeg å spille lyd når du er i stille modus og låst i iOS 6?

stemmer
46

Sluttbruker prosess

  1. Åpne app
  2. Slå på 'Silent Mode'.
  3. Trykk på 'Lock-knappen'
  4. App kan likevel begynne å spille en lyd etter timer har gått, ikke spiller noen lyd i mellomtiden.

Apps som gjør dette

Mange alarm apps har klarer å gjøre dette, og jeg tror ikke de bruker stille lyd å holde app kjører som de ikke høres hvis du faktisk avslutter app med hjem.

  • Alarm Clock Pro
  • min klokke
  • Wave Alarm
  • skremt
  • jeg er hjemme
  • ...

... Er de holde en loop som kjører etter å ha blitt låst noen hvordan eller det en melding (som ikke kan spille av lyd i stille) starter programmet opp igjen for å spille av lyd, eller en annen metode?

Dagens metoder implementert

AVAudioPlayer bruker:

AudioSessionInitialize(nil, nil, nil, nil);
AudioSessionSetActive(YES);

UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty (kAudioSessionProperty_AudioCategory, sizeof(sessionCategory),&sessionCategory);

Og sette Info.plist til:

Nødvendige bakgrunnsmodi (UIBackGroundModes) - App spiller lyd (audio)

På nåværende tidspunkt

Jeg kan spille av lyd, selv i stille når programmet er i gang og på skjermen. Hvis lyden er allerede kjører applikasjonen kan lukkes med hjem-knappen og lyd vil kjøre. MEN hvis programmet ikke spiller lyd, og skjermen er låst, er alle tråder drept og lyd er aldri spilt. Hvordan teser apps klarer å omgå dette?

Mulige tilnærminger funnet så langt

A. Bruk 'beginBackgroundTaskWithExpirationHandler:' med en uendelig løkke å holde app som kjører på ubestemt tid.

Pros:

  • Ser ut som du kan gjøre dette arbeidet i en rekke situasjoner, selv når brukeren trykker hjem.

Ulemper:

  • Det går mot eple politikk så langt jeg kan fortelle.
  • vil bruke mer ressurser

kommentarer:

Jeg har nesten fått dette til å fungere, og kanskje med litt tilpasning. Dette ser ikke ut til å være hva alle disse andre alarmer gjør som de ikke fortsette å kjøre hvis du trykker hjem BTN. Som tyder på at de bruker noen metode som gir dem tillatelse til å kjøre mens låst, men ikke i BG. (Som er hva jeg trenger)

Også, når du spør hvor mye tid du har igjen å kjøre får du ca 10 min. Ved å slippe en uendelig løkke der tallene faktisk vil kjøre ned til 0, og deretter gå inn negativer i timevis. (Testet) Im ikke sikker på hvordan dette ville oppføre seg i den virkelige verden, eller i form av app aksept.

B. Bruk en lydløs lyd sløyfe for å opptre som en continus audio spille media senter

Pros:

  • Jobbet da låst, og vil holde opp med å kjøre i de fleste situasjoner.

Ulemper:

  • Kan mislykkes hvis avbrutt av en annen mediesenter og i enkelte andre anledninger.
  • Kan også gå Agains eple politikk.

kommentarer:

Dette kan fungere jeg mange situasjoner, men er langt ikke ideelt. Og siden Som jeg sier igjen, det må være en annen metode som ikke er dokumentert.

Conclussions så langt

Testing med de børsnoterte APPS tyder på at de ikke bruker noen av de to metodene jeg nettopp har beskrevet. Metode 'A' synes å være nærmere, men hvis implementert vil ikke oppføre seg hvordan disse programmene oppfører seg.

Jeg brukte en Apple Developer billett for å få mer info, jeg skal legge noen nye funn langs disse midler også.

Takk skal du ha

Enhver innsikt er verdsatt, og for din deltakelse så langt.

Publisert på 15/03/2012 klokken 14:41
kilden bruker
På andre språk...                            


8 svar

stemmer
0

Se inn SystemSoundID; deres audio spiller på volumet av "Ringer og varsler" glideren i Innstillinger> Lyder tross volumet satt av volumknappene og lydløs modus.

Svarte 15/03/2012 kl. 16:51
kilden bruker

stemmer
5

Hadde du tidligere gjort dette i programmet:

    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 hadde en bruker fortelle meg at lyden ikke var i arbeid på en app (vel før iOS5!). Viste seg sin ring / lydløs-bryteren ble satt til "stille". Så jeg lagt denne koden, og det fører til at "stille" innstillingen overstyres. Dette er nyttig hvis du har en musikk-app, for eksempel, og du ønsker å musikk å fortsette å spille.

Svarte 15/03/2012 kl. 17:13
kilden bruker

stemmer
1

Bare en sjekk, er koden mangler denne linjen:

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
Svarte 16/03/2012 kl. 19:04
kilden bruker

stemmer
1

Har du registrert din app som ønsker å bruke lyd i bakgrunnen?

Fra docs :

A: Jeg bruker MPMoviePlayerController å spille med bare lyd filmer og andre lydfiler på iPhone i iOS 4. Hvordan sikrer jeg mitt audio vet vil fortsette å spille når søknaden min blir slått inn i bakgrunnen eller skjermen er låst?

Først må du erklære at programmet støtter bakgrunn gjennomføring. En applikasjon gjør dette ved å inkludere UIBackgroundModes nøkkelen i sin Info.plist fil. Denne nøkkelen identifiserer hvilke bakgrunnsoppgaver søknaden din støtter. Dens verdi er en matrise som inneholder en eller flere strenger. Angi strengverdien lyd for å indikere programmet spiller hørbar innhold til brukeren mens i bakgrunnen.

Neste, hvis du ønsker å sikre at filmen lyden fortsetter når skjermen låses, må du tilordne en passende kategori for lyd økt. Du kan ikke stole på standard audio sesjon, der kategori (starter i iPhone OS 2.2) er AVAudioSessionCategorySoloAmbient (eller ekvivalent, kAudioSessionCategory_SoloAmbientSound).

For avspilling for å fortsette når skjermen låses, eller når ringen / lydløs bryteren er i “stille” stilling, benyttes AVAudioSessionCategoryPlayback (eller den tilsvarende kAudioSessionCategory_MediaPlayback) kategori. Listing 1 viser hvordan å initial programmets lyd økt med AVAudioSessionCategoryPlayback kategorien.

Svarte 25/03/2012 kl. 22:25
kilden bruker

stemmer
0

Jeg merker at disse programmene er veldig klare på deres krav. De vil ikke fungere med mindre (1) brukeren tillater lokale varslinger for dette programmet, i Innstillinger> Varsling, og (2) app er forreste når brukeren låser skjermen (for eksempel, vil de ikke fungere hvis brukeren klikker Hjem-knappen for å avslutte programmet og deretter låser skjermen).

Derfor er det sannsynligvis en kombinasjon av en lokal varsling og en stille lyden spilles i bakgrunnen. Den tause lyd betyr at når skjermen er låst, hvis app var forreste, det er ikke suspendert. Den lokale varsling dermed sendt til app selv og programmet er i stand til å reagere ved å produsere alarmlyden. Eller kanskje det er ingen stille lyd og alarmlyden du hører er bare tilpasset lyd knyttet til den lokale varsling (men hvis så, så er det ikke klart for meg hvorfor app ville kreve å være fremste når skjermen er låst ).

Også, selv om jeg ikke har testet dette, oppførselen til den stille bryteren på iPhone kan ha endret seg i 5.1 som svar på hendelsen Mahler (http://www.nytimes.com/2012/01/13/nyregion/ringing- slutt-stoppet-men-concertgoers-alarm-persists.html). Dette ville forklare hvorfor utviklerne kommenterer at de kunne gjøre dette til 5,1.

Svarte 27/03/2012 kl. 01:04
kilden bruker


stemmer
2

Den lange arbeidet med å hente Løsningen på dette kan være en plassering basert begrunnelse. I utgangspunktet bruker plasseringen bakgrunn tjeneste til å rettferdiggjøre periodiske oppdateringer av appen din, og dermed utløse en alarm. Dette kan rettferdiggjøres til Apple ved å inkludere en funksjon som Været oppdateringer, som krever stedstjenester.

Jeg skal se nærmere på dette litt inn i fremtiden. Vennligst hvis du har tid til å se på det nå, eller hvis du har innsikt, ikke nøl med å poste.

God jakt.

Svarte 26/11/2012 kl. 01:57
kilden bruker

stemmer
15

Du trenger å gjøre noen endringer i plist fil.

dvs. 1) Sett Nødvendig bakgrunnsmodus til App spiller lyd

2) sett Søknad kjører ikke i bakgrunnen til YES.

 NSError *setCategoryErr = nil;
    NSError *activationErr  = nil;
    [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error:&setCategoryErr];
    [[AVAudioSession sharedInstance] setActive:YES error:&activationErr];

Deretter må du skrive disse mye kode i AppDelege

Nå kan du enkelt kjøre lyd mens telefonen låses skjermen eller i bakgrunnen.

Svarte 01/02/2013 kl. 04:13
kilden bruker

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