0

I am making an app which starts and runs a process whenever any music player is playing music, and pauses the process when the music is paused(or during a phone call); I thought I could just use FileObserver to see when a music file was accessed(it needs to be able to tell which song is being played), but whenever I have the observer running and I start a music player, a bunch of the files seem to be accessed at once. My questions are:

  • Is there a better way(or any way) to tell when music is playing from any player?
  • how do I stop the previous iteration of the method called by FileObserver from running if another song is started?
  • How do I "pause" the method running if the music is paused or the audiofocus is changed?

I'm not sure if there's something wrong with my observer, so here it is:

    observer = new FileObserver(observedPath) {

        @Override
        public void onEvent(int event,final String file) {

            event &= FileObserver.ALL_EVENTS;
            switch(event) {
                case FileObserver.DELETE_SELF:
                    break;

                case FileObserver.OPEN:
                case FileObserver.ACCESS:

                    if(changesRunning > 0)
                    {
                        stopCurrentChange.post(new Runnable() {
                            @Override
                            public void run() {
                                return;
                            }
                        });
                    }
                    mainThreadHandler.post(new Runnable() {
                        @Override
                        public void run()
                        {
                            Log.v(TAG,"The event was triggered.");
                        }
                    });
                    handler.post(new Runnable() {

                        @Override
                        public void run() {
                            changesRunning++;//global variable being used
                            GatherChangeVolume(username, deviceName, file);
                            changesRunning = 0;
                        }
                });
                    break;
                default:
                    break;
            }

This was my logcat output:

08-10 17:30:19.874 3398-3398/badmexican333.volumizer17 V/TweakRunner: Service trying to watch /storage/sdcard1/Music/
08-10 17:30:34.309 3398-3398/badmexican333.volumizer17 V/TweakRunner: The event was triggered.
08-10 17:30:34.310 3398-3799/badmexican333.volumizer17 A/FileObserver: Unhandled exception in FileObserver badmexican333.volumizer17.TweakRunner$1@21c3ca00
                                                                   java.lang.NullPointerException
                                                                       at badmexican333.volumizer17.TweakRunner$1.onEvent(TweakRunner.java:123)
                                                                       at android.os.FileObserver$ObserverThread.onEvent(FileObserver.java:125)
                                                                       at android.os.FileObserver$ObserverThread.observe(Native Method)
                                                                       at android.os.FileObserver$ObserverThread.run(FileObserver.java:88)
08-10 17:30:34.314 3398-3799/badmexican333.volumizer17 A/FileObserver: Unhandled exception in FileObserver badmexican333.volumizer17.TweakRunner$1@21c3ca00
                                                                   java.lang.NullPointerException
                                                                       at badmexican333.volumizer17.TweakRunner$1.onEvent(TweakRunner.java:123)
                                                                       at android.os.FileObserver$ObserverThread.onEvent(FileObserver.java:125)
                                                                       at android.os.FileObserver$ObserverThread.observe(Native Method)
                                                                       at android.os.FileObserver$ObserverThread.run(FileObserver.java:88)
08-10 17:30:34.314 3398-3398/badmexican333.volumizer17 V/TweakRunner: The event was triggered.
08-10 17:30:34.318 3398-3398/badmexican333.volumizer17 V/TweakRunner: The event was triggered.
08-10 17:30:34.319 3398-3799/badmexican333.volumizer17 A/FileObserver: Unhandled exception in FileObserver badmexican333.volumizer17.TweakRunner$1@21c3ca00
                                                                   java.lang.NullPointerException
                                                                       at badmexican333.volumizer17.TweakRunner$1.onEvent(TweakRunner.java:123)
                                                                       at android.os.FileObserver$ObserverThread.onEvent(FileObserver.java:125)
                                                                       at android.os.FileObserver$ObserverThread.observe(Native Method)
                                                                       at android.os.FileObserver$ObserverThread.run(FileObserver.java:88)
08-10 17:30:34.425 3398-3398/badmexican333.volumizer17 V/TweakRunner: The event was triggered.
08-10 17:30:34.425 3398-3799/badmexican333.volumizer17 A/FileObserver: Unhandled exception in FileObserver badmexican333.volumizer17.TweakRunner$1@21c3ca00
                                                                   java.lang.NullPointerException
                                                                       at badmexican333.volumizer17.TweakRunner$1.onEvent(TweakRunner.java:123)
                                                                       at android.os.FileObserver$ObserverThread.onEvent(FileObserver.java:125)
                                                                       at android.os.FileObserver$ObserverThread.observe(Native Method)
                                                                       at android.os.FileObserver$ObserverThread.run(FileObserver.java:88)
08-10 17:30:34.480 3398-3799/badmexican333.volumizer17 A/FileObserver: Unhandled exception in FileObserver badmexican333.volumizer17.TweakRunner$1@21c3ca00
                                                                   java.lang.NullPointerException
                                                                       at badmexican333.volumizer17.TweakRunner$1.onEvent(TweakRunner.java:123)
                                                                       at android.os.FileObserver$ObserverThread.onEvent(FileObserver.java:125)
                                                                       at android.os.FileObserver$ObserverThread.observe(Native Method)
                                                                       at android.os.FileObserver$ObserverThread.run(FileObserver.java:88)
08-10 17:30:34.484 3398-3398/badmexican333.volumizer17 V/TweakRunner: The event was triggered.
08-10 17:30:34.571 3398-3398/badmexican333.volumizer17 V/TweakRunner: The event was triggered.

The output carries on on in this pattern for a little longer before stopping.

I'm new at android development, and any help would be greatly appreciated.

1 Answers1

1

You can use the AudioManager API to easily check if music is currently playing.

AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
if (audioManager.isMusicActive()) {
    // music is playing
}

See: AudioManager.isMusicActive()

Matthieu Brucher
  • 21,634
  • 7
  • 38
  • 62
Bryan Dunlap
  • 1,156
  • 10
  • 7
  • Thank you; searching for that led me to [this](https://stackoverflow.com/questions/3616956/how-to-get-current-playing-song-details-from-mediaplayer) bit on how to get the details of the track, as well. Now I just need help with the last two things... – badmexican333 Aug 11 '16 at 02:05
  • Usage example added. Someone care to explain the downvote? – Bryan Dunlap Aug 11 '16 at 17:16