如何限制android播放器同时播放多个媒体文件?
How to restrict android player from playing more than one media file parallely?
如果我在其他应用程序中播放音乐,例如foobar2000
然后在我的应用中使用这个功能播放音乐,两个播放器会同时播放
public void playMusic(String file){
Uri uri=Uri.parse("android.resource://" + getPackageName() + "/raw/"+file);
if(uri!=null) {
myPlayer = new MediaPlayer();
if(android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){
myPlayer.setAudioAttributes(new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build());
}else{
myPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
}
try {
myPlayer.setDataSource(getApplicationContext(), uri);
} catch (IllegalArgumentException e) {
} catch (SecurityException e) {
} catch (IllegalStateException e) {
} catch (IOException e) {
}
try {
myPlayer.prepare();
} catch (IllegalStateException e) {
} catch (IOException e) {
}
myPlayer.start();
}
}
如果我先在我的应用程序中播放音乐,然后再播放其他播放器,其他播放器仍然无法停止我的播放器
如果我尝试其他两个播放器应用程序,它们可以互相停止。
如何强制 Android 只播放我的播放器,并允许其他播放器停止我的播放器?
您需要使用 AudioManager class,如下所示,
每当你需要音频焦点时,调用下面的方法
protected fun requestAudioFocus(): Boolean {
val audioManager: AudioManager = binding.root.context.getSystemService(Context.AUDIO_SERVICE) as AudioManager
val res = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
mFocusRequest = AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT)
.setAudioAttributes(mPlaybackAttributes)
.setAcceptsDelayedFocusGain(true)
.setOnAudioFocusChangeListener(afChangeListener)
.build()
audioManager.requestAudioFocus(mFocusRequest)
} else {
audioManager.requestAudioFocus(afChangeListener,
// Use the music stream.
AudioManager.STREAM_MUSIC,
// Request permanent focus.
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT)
}
return res == AudioManager.AUDIOFOCUS_REQUEST_GRANTED
}
每当您想发布它时,请使用下面的代码,
val audioManager: AudioManager = binding.root.context.getSystemService(Context.AUDIO_SERVICE) as AudioManager
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
audioManager.abandonAudioFocusRequest(mFocusRequest)
} else {
audioManager.abandonAudioFocus(afChangeListener)
}
} catch (e: Exception) {
}
在清单中,您需要请求修改音频设置的权限
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
注意:- 代码片段在 Kotlin 中
如果我在其他应用程序中播放音乐,例如foobar2000
然后在我的应用中使用这个功能播放音乐,两个播放器会同时播放
public void playMusic(String file){
Uri uri=Uri.parse("android.resource://" + getPackageName() + "/raw/"+file);
if(uri!=null) {
myPlayer = new MediaPlayer();
if(android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){
myPlayer.setAudioAttributes(new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build());
}else{
myPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
}
try {
myPlayer.setDataSource(getApplicationContext(), uri);
} catch (IllegalArgumentException e) {
} catch (SecurityException e) {
} catch (IllegalStateException e) {
} catch (IOException e) {
}
try {
myPlayer.prepare();
} catch (IllegalStateException e) {
} catch (IOException e) {
}
myPlayer.start();
}
}
如果我先在我的应用程序中播放音乐,然后再播放其他播放器,其他播放器仍然无法停止我的播放器
如果我尝试其他两个播放器应用程序,它们可以互相停止。
如何强制 Android 只播放我的播放器,并允许其他播放器停止我的播放器?
您需要使用 AudioManager class,如下所示, 每当你需要音频焦点时,调用下面的方法
protected fun requestAudioFocus(): Boolean {
val audioManager: AudioManager = binding.root.context.getSystemService(Context.AUDIO_SERVICE) as AudioManager
val res = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
mFocusRequest = AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT)
.setAudioAttributes(mPlaybackAttributes)
.setAcceptsDelayedFocusGain(true)
.setOnAudioFocusChangeListener(afChangeListener)
.build()
audioManager.requestAudioFocus(mFocusRequest)
} else {
audioManager.requestAudioFocus(afChangeListener,
// Use the music stream.
AudioManager.STREAM_MUSIC,
// Request permanent focus.
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT)
}
return res == AudioManager.AUDIOFOCUS_REQUEST_GRANTED
}
每当您想发布它时,请使用下面的代码,
val audioManager: AudioManager = binding.root.context.getSystemService(Context.AUDIO_SERVICE) as AudioManager
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
audioManager.abandonAudioFocusRequest(mFocusRequest)
} else {
audioManager.abandonAudioFocus(afChangeListener)
}
} catch (e: Exception) {
}
在清单中,您需要请求修改音频设置的权限
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
注意:- 代码片段在 Kotlin 中