检测音频何时开始播放其他应用程序
我正在尝试开发一款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);
}
}
您刚刚在您的代码中声明了侦听器,但未注册它。 你需要像
am.requestAudioFocus(listener, AudioManager.STREAM_MUSIC,
AudioManager.AUDIOFOCUS_GAIN);
检查this注册了
我试着像你建议的那样注册它,但它仍然不起作用。我甚至尝试在应用程序中播放音频文件,并在主要活动中使用监听器(请参阅编辑)。 –
@Aces_Charles检查am.requestAudioFocus的结果。 int result = am.requestAudioFocus(listener,AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN); –
它现在似乎在工作。不知道为什么它没有之前。可能没有保存该文件或者它没有重建。感谢帮助队友。 –
https://stackoverflow.com/a/3586233/3364266此链接可以帮助你 –
@SamirBhatt感谢您的链接,但这个问题的答案建议使用AudioManager .OnAudioFocusChangeListener这是我上面尝试过的。也许我使用的服务是错误的。 –