2017-09-04 107 views
0

我正在尝试开发一款Android应用程序,该应用程序会在任何应用程序开始播放音频时显示弹出窗口,即使应用程序已最小化。检测音频何时开始播放其他应用程序

到目前为止,我已经尝试使用onAudioFocusChange监听器的服务,但从不调用监听器。这是我到目前为止:

public class MyService extends Service { 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 

     Log.i("AUDIO", "SERVICE STARTED"); //CALLED 

     AudioManager am = (AudioManager) getSystemService(AUDIO_SERVICE); 
     AudioManager.OnAudioFocusChangeListener listener = new AudioManager.OnAudioFocusChangeListener(){ 
      @Override 
      public void onAudioFocusChange(int i) { 
       Log.i("AUDIO", "FOCUS CHANGED"); //NOT CALLED 
      } 
     }; 

     return super.onStartCommand(intent, flags, startId); 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     // TODO: Return the communication channel to the service. 
     throw new UnsupportedOperationException("Not yet implemented"); 
    } 
} 

我在正确的轨道上吗?

编辑: 尝试按建议注册侦听器,但仍然无法正常工作。即使在主要活动中。

public class MainActivity extends AppCompatActivity { 
    @Override 


    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     final MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.test); 

     Button btnPlay1 = (Button) findViewById(R.id.btn_play_1); 

     btnPlay1.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       mediaPlayer.start(); 
      } 
     }); 

     AudioManager am = (AudioManager) getSystemService(AUDIO_SERVICE); 

     AudioManager.OnAudioFocusChangeListener listener = new AudioManager.OnAudioFocusChangeListener(){ 
      @Override 
      public void onAudioFocusChange(int i) { 
       Log.i("AUDIO", "FOCUS CHANGED"); //NOT CALLED 
      } 
     }; 

     am.requestAudioFocus(listener, AudioManager.STREAM_MUSIC, 
       AudioManager.AUDIOFOCUS_GAIN); 
    } 

} 
+0

https://stackoverflow.com/a/3586233/3364266此链接可以帮助你 –

+0

@SamirBhatt感谢您的链接,但这个问题的答案建议使用AudioManager .OnAudioFocusChangeListener这是我上面尝试过的。也许我使用的服务是错误的。 –

回答

1

您刚刚在您的代码中声明了侦听器,但未注册它。 你需要像

am.requestAudioFocus(listener, AudioManager.STREAM_MUSIC, 
       AudioManager.AUDIOFOCUS_GAIN); 

检查this注册了

+0

我试着像你建议的那样注册它,但它仍然不起作用。我甚至尝试在应用程序中播放音频文件,并在主要活动中使用监听器(请参阅编辑)。 –

+0

@Aces_Charles检查am.requestAudioFocus的结果。 int result = am.requestAudioFocus(listener,AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN); –

+0

它现在似乎在工作。不知道为什么它没有之前。可能没有保存该文件或者它没有重建。感谢帮助队友。 –

相关问题