- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个奇怪的问题。我将 prepareAsync 方法与 MediaPlayer
一起使用,但我声明的监听器从未被触发。我尝试从 Internet(广播电台)流式传输实时 .mp3
提要。我为监听器使用了内联方法,但我也尝试过实现接口(interface)但没有成功。这是我的部分代码:
在成员(member)部分:
String url = "http://<my_url>.mp3";
MediaPlayer mediaPlayer = new MediaPlayer();
在 Activity onCreate()
中:
ToggleButton playButton = (ToggleButton) findViewById(R.id.playToggleButton);
playButton.setOnClickListener(this);
playButton.clearFocus();
playButton.setClickable(false);
mediaPlayer.setOnPreparedListener(new OnPreparedListener() {
public void onPrepared(MediaPlayer mp) {
ToggleButton playButton = (ToggleButton) findViewById(R.id.playToggleButton);
playButton.setClickable(true);
mp.start();
}
});
preparePlayer();
然后,这是 preparePlayer()
方法:
private void preparePlayer() {
if (mediaPlayer == null) {
mediaPlayer = new MediaPlayer();
}
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
mediaPlayer.setDataSource(url);
mediaPlayer.prepareAsync();
} catch (IllegalArgumentException e) {
Toast.makeText(
MyStreamActivity.this,
getResources().getString(R.string.erreurIllegalArgument),
Toast.LENGTH_LONG).show();
e.printStackTrace();
} catch (IllegalStateException e) {
Toast.makeText(
MyStreamActivity.this,
getResources().getString(R.string.erreurIllegalState),
Toast.LENGTH_LONG).show();
e.printStackTrace();
} catch (IOException e) {
Toast.makeText(
MyStreamActivity.this,
getResources().getString(R.string.erreurIO),
Toast.LENGTH_LONG).show();
e.printStackTrace();
}
}
还有(仅作记录),我进行清洁的 onDetroy()
:
private void releaseMediaPlayer() {
if (mediaPlayer != null) {
if(mediaPlayer.isPlaying()) {
mediaPlayer.stop();
}
mediaPlayer.release();
mediaPlayer = null;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
releaseMediaPlayer();
}
最佳答案
您正在 Activity
的创建方法中设置 OnPreparedListener
,稍后可能会在您的 中创建一个新的
方法。任何新创建的 MediaPlayer
>preparePlayer()MediaPlayer
都不会设置 prepareListener
。您还应该添加一个 errorlistener
来找出发生了什么。
您可能希望将 setOnPreparedListener
调用移到
if (mediaPlayer == null) {
mediaPlayer = new MediaPlayer();
}
以及像这样设置一个setOnErrorListener
:
if (mediaPlayer == null) {
mediaPlayer = new MediaPlayer();
mediaPlayer.setOnErrorListener(....);
mediaPlayer.setOnPreparedListener(new OnPreparedListener() {
public void onPrepared(MediaPlayer mp) {
ToggleButton playButton = (ToggleButton) findViewById(R.id.playToggleButton);
playButton.setClickable(true);
mp.start();
}
});
}
请将e.printStackTrace();
改为
Log.e("tag", e.getMessage(), e);
希望这对您有所帮助,如果您有任何日志数据,请告诉我们,因为这也会很有用。
关于AndroidId MediaPlayer prepareAsync 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10307131/
我正在尝试从这个网址播放音频:http://mtl2.liveatc.net/lbbg这是我的代码: public void setConnection(String url) { Strin
我目前正在尝试播放 SDCard 中的 MP3 文件。不幸的是我做不到。 这是我尝试过的: private MediaPlayer _mediaPlayer; @Override pr
我有一个奇怪的问题。我将 prepareAsync 方法与 MediaPlayer 一起使用,但我声明的监听器从未被触发。我尝试从 Internet(广播电台)流式传输实时 .mp3 提要。我为监听器
我在使用特定 URI 启动 MediaPlayer 的 Logcat 中得到以下返回。通常每个 Uri,无论好坏,都会播放或返回一个错误,除了这个特定的。 I/MPS﹕ PrepAsync start
我使用 Android MediaPlayer 进行流式音频播放。但有时记录准备阶段需要太长时间。所以我想让用户能够中断准备并开始另一个。我该怎么做? 提前致谢。 迈克尔 最佳答案 在valid an
这是我的视频播放器类代码,每次我回家然后直接回到这个 Activity 时它都会出现异常,我试过了但找不到解决方案, 错误: java.lang.IllegalStateException at
我正在关注 this tutorial,但是prepareAsync的用法不清楚,我的代码没有输出任何音频。我正在使用 prepareAsync() 因为我的 mp3 在线并且我不想在媒体播放器准备期
我正在使用 MediaPlayer 的 prepareAsync() 函数。 我的代码如下: try { mediaPlayer.setDataSource(stream_url); medi
05-19 11:52:51.622: ERROR/MediaPlayer(1291): prepareAsync called in state 8 05-19 11:52:51.622: WARN
我正在尝试实现一个视频播放列表,以便它们可以从一个视频平稳过渡到下一个。 mediaPlayer 对象有一个 prepareasync() 方法,它似乎可以预先缓冲视频以便播放。如何从 VideoVi
我想实现基本的媒体播放器功能,但对 PrepareAsync() 感到困惑和 Prepare() 方法调用。如果音频文件在 raw 文件夹中,应该使用哪一个。 最佳答案 这些方法之间的区别基本上在于它
我正在编写一个可以流式传输 mp3 文件的小应用程序。我正在使用 NPR 代码,但 mediaPlayer.prepareAsync() 有一个奇怪的问题。 我使用的是 PlaybackService
我的问题是应用程序在 prepareAsync 中停留了大约 3-4 秒: 这需要很长时间,所以我需要改变一些东西,以尽量减少它停留的时间。 这是我的代码: if (path_to_play
我使用了以下代码: mp = MediaPlayer.create(this, Uri.parse("file://"+filePath)); mp.start(); 这很好用。然后我想播放文件夹中的
我试图从我的应用程序的 obb 扩展内的 zip 加载 mp4 文件。我正在使用和扩展 APEZProvider 来获取视频文件的 URI。然而;当我设置 URI 后,应用程序崩溃并出现 Illega
我在 prepareAsync 方法中遇到错误 (1,-4)。文档指定这是“文件格式不正确”(对吗?),但文件是 mp3 格式。此外,当在另一个 Activity 中调用媒体播放器时,相同的文件会在旧
我正在使用 MediaPlayer 播放 mp3 文件 (url),一切正常。 mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); m
我有一个包含 mp4 视频的扩展文件 (zip),我想用 VideoView 播放这些视频。当调用 videoView.setVideoURI() 时,它会在我的 VideoView 的 openVi
我有这段代码: try { mMusicPlayer.reset(); FileInputStream fis = new Fi
我正在尝试使用 APK 扩展 Zip 库直接从扩展文件加载 .mp4 文件,如下所示:http://developer.android.com/google/play/expansion-files.
我是一名优秀的程序员,十分优秀!