Meldingsgeluid wanneer service eindigt

Ik heb een service die als het klaar is met het uitvoeren van taken een melding met geluid afspeelt. Als het eindigt, mijn aanroepende toepassing, als deze bovenaan staat om naar de service te stoppen. Het probleem is dat notificationmanager terugkeert voordat het geluid stopt, dus stopt de toepassing de service voordat het geluid is afgelopen (als het lang is). Is er een manier die ik kan detecteren wanneer het geluid is afgelopen om de service niet te laten stoppen voordat het geluid stopt ?. Ik heb zonder succes naar soundmanager en andere threads gekeken. Een oplossing is om een ​​Thread.sleep (ms) in te stellen, maar als het notificatio-geluid lang is, kan het toch worden gestopt en wil ik de respons van mijn app net nadat de service is voltooid. Een mogelijke oplossing zou zijn om de lengte van het mp3-bestand te berekenen, maar ik weet niet hoe het moet ...

0

1 antwoord

Ervan uitgaande dat u een MediaPlayer gebruikt voor het afspelen, kunt u de duur ophalen met MediaPlayer.getDuration() .

Houd er rekening mee dat dit niet werkt met een aantal VBR mp3. dus misschien wil je de mp3 opslaan met een constante bitrate of een tool als vbrfix gebruiken voordat je deze inlevert jouw app.

The duration is returned in milliseconds, so you can simply pass this value to SystemClock.sleep()

/Bewerk:

Oké, als u het bestand als een item hebt opgeslagen, kunt u deze code gebruiken:

MediaPlayer media = new MediaPlayer();
    AssetFileDescriptor descriptor;
    try {
        descriptor = assetMan.openFd("YOURNAME.mp3");
        media.setDataSource(descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength());
        descriptor.close();
        media.prepare();
    } catch (IOException e) {
       //File not found
        e.printStackTrace();
    }
     media.getDuration();
    media.release();
2
toegevoegd
Nee, ik gebruik MediaManager niet, maar NotificationManager. Deze oplossing is niet nuttig.
toegevoegd de auteur Tibor, de bron
Is een mediaplayer een unieke instantie van het apparaat of kan ik deze zelfstandig in mijn toepassing gebruiken als een andere toepassing muziek draait?
toegevoegd de auteur Tibor, de bron
Ik heb het gedaan. Ik gebruik MediaPlayer om de duur te krijgen, althoguth Ik kan Notificationmanager als normaal gebruiken.
toegevoegd de auteur Tibor, de bron
Nou, je kunt de duur niet krijgen met NotificationManager. En zoals u zei, het is een bestand dat u in uw app plaatst, waarom niet gewoon een MediaPlayer gebruiken, het bestand toewijzen, de duur ervan halen en vervolgens de MediaPlayer vernietigen zonder het bestand af te spelen?
toegevoegd de auteur Force, de bron
Het is een normale klas: developer.android.com/reference/android/media/MediaPlayer .ht & zwnj; ml Ik zal een voorbeeldcode toevoegen aan mijn antwoord
toegevoegd de auteur Force, de bron