So, following the advice from Syed in this thread, I was able to do a temp fix. Adding ~300 milliseconds of sound to the end of the sound being played does stop it from being cut short. However, this is extremely impractical as I have 2000+ sounds.
Is this a known bug in Android 2.2? Has anyone else experienced this problem? Thanks, John On Mar 26, 6:21 pm, "john.p" <[email protected]> wrote: > I am triggering a MediaPlayer to play a sound on a button click. > Sometimes, the player will play the whole sound, sometimes it will > not. It always cuts off on the end. I read a few threads on here/ > stackoverflow where people were having the same problem, but none of > the suggestions worked. For example, someone said that adding a > mediaPlayer.onCompletionListener() would fix the issue, but it has > not. > > There were a couple posts on here about similar issues, but no real > fixes. > > I can reproduce this problem on the emulator, but not my htc > incredible or my girlfriend's moto droid 2, which are both running > android 2.2. > > It seems to be an issue with the 'end' parameter in setDataSource(). I > can add ~3000 bytes to end and that fixes the problem in the emulator, > but then if I run the app in my phone it cases the audio to loop back > around to the start. > > Here is the code: > > public View getView(int position, View convertView, ViewGroup parent) > { > > LayoutInflater inflater = getLayoutInflater(); > View row = inflater.inflate(R.layout.vocab_row, parent, > false); > > ImageView playIcon = (ImageView) row > .findViewById(R.id.blueplay_icon); > TextView vocabWord = (TextView) row > .findViewById(R.id.vocab_text_word); > TextView vocabMeaning = (TextView) row > .findViewById(R.id.vocab_text_meaning); > > vocabWord.setText(data.get(position).getKey()); > vocabMeaning.setText(data.get(position).getDefinition()); > > final String fileName = "audio/" + > data.get(position).getAudio(); > > // set the click listener for the play button > playIcon.setOnClickListener(new OnClickListener() { > public void onClick(View v) { > > final MediaPlayer player = new MediaPlayer(); > AssetManager manager = SingleLesson.this.getAssets(); > final AssetFileDescriptor descriptor; > > try { > > descriptor = manager.openFd(fileName); > long start = descriptor.getStartOffset(); > long end = descriptor.getLength(); > > //reset player > if (player != null) { > player.reset(); > } > > player.setDataSource(descriptor.getFileDescriptor(), > start, end); > > } catch (IOException e) { > Log.e("IO EXCEPTION: ", "while getting mp3 > assets."); > e.printStackTrace(); > } > > // set volume > player.setVolume(100, 100); > > try { > player.prepare(); > } catch (IllegalStateException e) { > Log.e("ERROR: ", "media player, illegal state"); > e.printStackTrace(); > } catch (IOException e) { > Log.e("ERROR: ", "media player, IO exception"); > e.printStackTrace(); > } > > player.setOnPreparedListener(new OnPreparedListener() > { > > @Override > public void onPrepared(MediaPlayer inPlayer) { > player.start(); > } > }); > > // called when the file is finished playing > player.setOnCompletionListener(new > OnCompletionListener() { > > @Override > public void onCompletion(MediaPlayer player) { > player.stop(); > player.release(); > } > > }); > } > }); -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en

