No idea, anyone? This problem really is severe - if I can't fix this all new devices like Nexus One, HTC Desire, Motorola Milestone etc. will be affected... :-(
Regards Marc Reichelt || http://www.marcreichelt.de/ On 15 Mrz., 20:55, Marc Reichelt <mcreich...@googlemail.com> wrote: > Hi there! > > I developed an audioplayer for Android for our new project which plays > local and online files. It works great on the G1, but somehow often > fails on the Nexus One when streaming MP3s from the Internet - > especially smaller files. > > The problem is that I am using the prepareAsync() method and an > OnPreparedListener but somehow onPrepared() is not called sometimes - > especially when the network is slow. So I am creating a MediaPlayer > object, set the OnPreparedListener, call setDataSource() with an URL > in it and call prepareAsync() - but onPrepared() is not called, > leaving the MediaPlayer in the completely useless transient state > "Preparing". And there seems to be no way to catch this failure. > > This is the code I used to track down this error: > > --- file: TestMediaPlayer.java --- > package de.marcreichelt.android.testmediaplayer; > > import android.app.Activity; > import android.media.MediaPlayer; > import android.media.MediaPlayer.OnPreparedListener; > import android.os.Bundle; > import android.util.Log; > > public class TestMediaPlayer extends Activity implements > OnPreparedListener { > > private static final String TAG = > TestMediaPlayer.class.getSimpleName(); > > @Override > public void onCreate(Bundle savedInstanceState) { > super.onCreate(savedInstanceState); > setContentView(R.layout.main); > > MediaPlayer mp = new MediaPlayer(); > mp.setOnPreparedListener(this); > > try { > > // Music from World of Goo Soundtrack > // seehttp://kylegabler.com/WorldOfGooSoundtrack/:-) > > Log.d(TAG, "mp.setDataSource()"); > > mp.setDataSource("http://marcreichelt.de/misc/android/test.mp3"); > Log.d(TAG, "mp.prepareAsync()"); > mp.prepareAsync(); > > } catch (Exception e) { > Log.e(TAG, "", e); > } > > } > > @Override > public void onPrepared(MediaPlayer mp) { > Log.d(TAG, "mp.start()"); > mp.start(); > } > > } > > --- end of file --- > > To test this code I created a new AVD with Google 7 API / Android 2.1 > and set the Emulator speed to "GPRS" (important!). I use the Android > 1.6 SDK for compiling my project and minSdkVersion is 4. > > This is what I get in Logcat: > 03-15 20:31:21.354: INFO/ActivityManager(63): Starting activity: > Intent { act=android.intent.action.MAIN > cat=[android.intent.category.LAUNCHER] flg=0x10200000 > cmp=de.marcreichelt.android.testmediaplayer/.TestMediaPlayer > bnds=[125,446][235,564] } > 03-15 20:31:21.424: DEBUG/TestMediaPlayer(213): mp.setDataSource() > 03-15 20:31:21.563: DEBUG/TestMediaPlayer(213): mp.prepareAsync() > 03-15 20:31:21.839: INFO/ActivityManager(63): Displayed activity > de.marcreichelt.android.testmediaplayer/.TestMediaPlayer: 440 ms > (total 440 ms) > 03-15 20:31:21.946: INFO/PlayerDriver(31): buffering (1) > > The method onPrepared() is not called, so I am not able to call > start() on the MediaPlayer object. > > Can anyone confirm this problem? Is this a bug in the Android 2.1 SDK > (or maybe 2.0.1, too)? And what can I do to solve this? > > Thanks in advance & regards > Marc Reichelt || http://www.marcreichelt.de/ -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en