我正在为android设计一个应用程序,需要各种短的音乐文件后播放彼此。
我设置了一个"onClick“监听器来运行一个循环,一遍又一遍地播放这些声音文件,它们可能会播放100多次。
但
我需要用户能够在播放时与应用程序交互,这在此时是不能的,循环运行,基本上设备被冻结,直到音乐文件完成播放。
有什么有用的解决方案的建议吗?
循环基本上是:
mPlayButton.setOnClickListener(new View.OnClickListener() {
@Override
public synchronized void onClick(View v) {
for(char i: method.toCharArray()){
mPlayer.play(getActivity(),Integer.parseInt(Character.toString(i)));
try {
wait(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});发布于 2013-10-08 19:04:38
您可以使用在后台播放音乐的服务来完成此操作。
这里有一个关于如何做到这一点的很好的教程:LINK。
类似于this:
当你想播放音乐的时候开始播放:
Intent svc=new Intent(this, BackgroundSoundService.class);
startService(svc); 并在项目中创建一个新的服务文件:
public class BackgroundSoundService extends Service {
private static final String TAG = null;
MediaPlayer player;
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
player = MediaPlayer.create(this, R.raw.idil);
player.setLooping(true); // Set looping
player.setVolume(100,100);
}
public int onStartCommand(Intent intent, int flags, int startId) {
player.start();
return 1;
}
public void onStart(Intent intent, int startId) {
// TO DO
}
public IBinder onUnBind(Intent arg0) {
// TO DO Auto-generated method
return null;
}
public void onStop() {
}
public void onPause() {
}
@Override
public void onDestroy() {
player.stop();
player.release();
}
@Override
public void onLowMemory() {
}
}发布于 2013-10-08 19:17:45
我只能猜测,因为您没有将代码附加到问题中,但听起来您实现了一个在UI线程上运行的循环,UI线程是应用程序的主线程。应用程序似乎被冻结了,因为一个线程一次只能执行一行代码,不能并行运行代码。您需要做的是创建一个不同的线程,在该线程上执行播放音乐的循环。有不同的方法可以实现这一点。我想你应该尝试实现一个服务。服务让你有可能在不同的线程上运行代码,你也可以很容易地与服务通信,例如开始或停止音乐的播放。关于服务的更多信息,请看这里:http://developer.android.com/reference/android/app/Service.html你也可以谷歌的android服务教程,在网络上有很多。祝好运!
发布于 2013-10-09 18:58:27
首先,睡眠不是控制时间的方法,因为MediaPlayer有一个可以设置的onCompletionListener。如果您仔细考虑资源的使用,它也有一个setNextMediaPlayer方法(您不能只创建一堆MediaPlayers并准备好它们)。
其次,您需要一个单独的线程或一个AsyncTask (这将产生一个新的线程)。除非您另行指定,否则服务将在与UI相同的线程中运行,并且它主要只会添加不必要的复杂性层。
最后,您可能需要考虑使用SoundPool。
https://stackoverflow.com/questions/19245675
复制相似问题