Java 从侦听器返回值
我有播放音乐的静态方法。播放完成后,如何从该方法返回值Java 从侦听器返回值,java,android,Java,Android,我有播放音乐的静态方法。播放完成后,如何从该方法返回值 public static int playSample(Context context, int resid) { AssetFileDescriptor afd = context.getResources().openRawResourceFd(resid); try { mediaPlayer.reset(); mediaPlayer.setDataSource(afd.getFil
public static int playSample(Context context, int resid) {
AssetFileDescriptor afd = context.getResources().openRawResourceFd(resid);
try {
mediaPlayer.reset();
mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getDeclaredLength());
mediaPlayer.prepare();
mediaPlayer.start();
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer mediaPlayer) {
// from here i want return some value that play is completed
}
});
afd.close();
} catch (IllegalArgumentException e) {
Log.e("a", "Unable to play audio queue do to exception: " + e.getMessage(), e);
} catch (IllegalStateException e) {
Log.e("a", "Unable to play audio queue do to exception: " + e.getMessage(), e);
} catch (IOException e) {
Log.e("a", "Unable to play audio queue do to exception: " + e.getMessage(), e);
}
}
这不是一种好的编码方式,但如果您希望在那里返回结果,您可以像这样忙碌地等待:
while(ml.Inidcator != PLAY_COMPLETED){
sleep(50) //
}
StaticActivity.playSample(this, R.id.random, new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer mediaPlayer) {
// do something when playing completes
}
}
这意味着,如果从UI线程调用静态方法,它将阻止任何操作,直到播放完成
这不是一种好的编码方式,但如果您希望在那里返回结果,您可以像这样忙碌地等待:
while(ml.Inidcator != PLAY_COMPLETED){
sleep(50) //
}
StaticActivity.playSample(this, R.id.random, new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer mediaPlayer) {
// do something when playing completes
}
}
这意味着如果从UI线程调用静态方法,它将阻止任何内容,直到播放完成。我认为返回值不是一个好方法,异步调用onCompletion方法,你可以用这个方法来做你想做的事情,比如播放下一首音乐,而不是通过返回值。我认为返回值不是一个好方法,onCompletion方法被异步调用,你可以做你想做的事情,比如用这个方法播放下一首音乐,而不是用返回值。你想用返回值做什么?在完成时侦听器中,放置调用外部方法的代码。让此外部方法处理“返回”值您希望如何处理返回的值?在完成时侦听器中,放置调用外部方法的代码。让此外部方法处理“return”值为什么不将一个
OnCompletionListener
作为“回调”传递给静态函数
public static int playSample(Context context, int resid, MediaPlayer.OnCompletionListener callback) {
//...
mediaPlayer.setOnCompletionListener(callback);
}
然后使用如下函数:
while(ml.Inidcator != PLAY_COMPLETED){
sleep(50) //
}
StaticActivity.playSample(this, R.id.random, new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer mediaPlayer) {
// do something when playing completes
}
}
如果您在所有情况下都不关心回调,那么您可能只需要提供
null
,并且仅在MediaPlayer对象上设置OnCompletionListener(如果它不是null
),为什么不将OnCompletionListener
作为“回调”传递给静态函数呢
public static int playSample(Context context, int resid, MediaPlayer.OnCompletionListener callback) {
//...
mediaPlayer.setOnCompletionListener(callback);
}
然后使用如下函数:
while(ml.Inidcator != PLAY_COMPLETED){
sleep(50) //
}
StaticActivity.playSample(this, R.id.random, new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer mediaPlayer) {
// do something when playing completes
}
}
如果您不关心所有情况下的回调,您可能只需要提供null
,并且仅在MediaPlayer对象上设置OnCompletionListener(如果它不是null
)