Android:如何检测所选音频正在 Android Studio 中播放
Posted
技术标签:
【中文标题】Android:如何检测所选音频正在 Android Studio 中播放【英文标题】:Android : How to detect that the selected audio is being played in Android Studio 【发布时间】:2018-08-28 19:30:45 【问题描述】:我正在尝试制作一个音频播放器应用程序,所有这些应用程序都通过使用活动和服务顺利运行。但是当您选择音频并播放它时会有一个限制。 当前播放音频时,在选择相同音频时,我让它从头开始。
问题: 如何检测所选音频正在播放。如果所选音频与正在播放的音频不同,它将从头开始播放,但如果相同,则不会执行任何操作。
在我的活动中:
//connect to the service
private ServiceConnection serviceConnection = new ServiceConnection()
@Override
public void onServiceConnected(ComponentName name, IBinder service)
Services.MediaBinder binder = (Services.MediaBinder) service;
//get service
services = binder.getService();
mediaBound = true;
@Override
public void onServiceDisconnected(ComponentName name)
mediaBound = false;
;
@Override
protected void onStart()
super.onStart();
if(playIntent==null)
playIntent = new Intent(this, Services.class);
playIntent.putExtra("url", String.valueOf(urlRaw));
bindService(playIntent, serviceConnection, Context.BIND_AUTO_CREATE);
startService(playIntent);
在服务中: 使用 onBind 获取变量:
@Override
public IBinder onBind(Intent intent)
urlMedia = intent.getStringExtra("url");
return mediaBinder; // private final IBinder mediaBinder
我在 onStartCommand 中使用来播放选定的音频。
@Override
public int onStartCommand(Intent intent, int flags, int startId)
try
//An audio file is passed to the service through putExtra();
if(isPng())
mPlayer.release();
mPlayer = MediaPlayer.create(getApplicationContext(), getResources().getIdentifier(String.valueOf(urlMedia),"raw",getPackageName()));
mPlayer.start();
catch (NullPointerException e)
stopSelf();
if (mPlayer != null)
initMusicPlayer();
return START_STICKY;
【问题讨论】:
【参考方案1】:使用另一个变量将新传递的url
保留在onBind()
方法中。然后检查新的url是否与旧的不同。
// On Bind
@Override
public IBinder onBind(Intent intent)
newUrlMedia = intent.getStringExtra("url");
return mediaBinder;
// On Start Command
@Override
public int onStartCommand(Intent intent, int flags, int startId)
try
if (newUrlMedia.equals(urlMedia))
// Same url is passes
return START_STICKY;
else
// Different url
urlMedia = newUrlMedia;
if(isPng())
mPlayer.release();
mPlayer = MediaPlayer.create(getApplicationContext(), getResources().getIdentifier(String.valueOf(urlMedia),"raw",getPackageName()));
mPlayer.start();
catch (NullPointerException e)
stopSelf();
if (mPlayer != null)
initMusicPlayer();
return START_STICKY;
【讨论】:
【参考方案2】:您正在使用绑定服务,因此您可以在服务中创建一个方法,例如
private String currentUrl;
public void playAudio(Sting url)
if(currentUrl.equals(url)) return;
this.currentUrl = url;
//Do other stuff.
当服务连接时,你可以使用这个公共方法。
@Override
public void onServiceConnected(ComponentName name, IBinder service)
Services.MediaBinder binder = (Services.MediaBinder) service;
//get service
services = binder.getService();
services.playAudio("url");
mediaBound = true;
【讨论】:
以上是关于Android:如何检测所选音频正在 Android Studio 中播放的主要内容,如果未能解决你的问题,请参考以下文章
ExtAudioRecorder:“写入失败:EBADF(错误文件描述符)”将音频录制到 WAV 文件 - Android Studio