0

私は、音楽プレーヤーが音楽を再生しているときにプロセスを開始して実行し、音楽が一時停止されたとき (または通話中) にプロセスを一時停止するアプリを作成しています。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.

出力は停止する前に、このパターンでもう少し長く続きます。

私はアンドロイド開発の初心者であり、どんな助けでも大歓迎です。

4

1 に答える 1

2

AudioManagerAPI を使用して、現在音楽が再生されているかどうかを簡単に確認できます。

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

参照: AudioManager.isMusicActive()

于 2016-08-10T22:48:38.367 に答える