【问题标题】:android how to tell when music is playing/pausedandroid如何判断音乐何时播放/暂停
【发布时间】:2016-08-10 22:39:51
【问题描述】:

我正在制作一个应用程序,该应用程序在任何音乐播放器播放音乐时启动并运行一个进程,并在音乐暂停时(或在通话期间)暂停该进程;我以为我可以只使用 FileObserver 来查看何时访问音乐文件(它需要能够判断正在播放哪首歌),但是每当我让观察者运行并启动音乐播放器时,一堆文件似乎立即访问。我的问题是:

  • 是否有更好的方法(或任何方法)来判断音乐何时从任何播放器播放?
  • 如果开始播放另一首歌曲,我如何阻止 FileObserver 调用的方法的上一个迭代运行?
  • 如果音乐暂停或音频焦点更改,我如何“暂停”正在运行的方法?

我不确定我的观察者是否有问题,所以这里是:

    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;
            }

这是我的 logcat 输出:

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.

在停止之前,输出会以这种模式持续一段时间。

我是 android 开发的新手,非常感谢任何帮助。

【问题讨论】:

    标签: android audio fileobserver


    【解决方案1】:

    您可以使用AudioManager API 轻松检查当前是否正在播放音乐。

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

    见:AudioManager.isMusicActive()

    【讨论】:

    • 谢谢;搜索它使我也找到了this 位,了解如何获取曲目的详细信息。现在我只需要最后两件事的帮助......
    • 添加了使用示例。有人愿意解释否决票吗?