Try this:

Instead of the

@Override
public void onCompletion (){
}

method use the
@Override
public void onPause() {
}

method at the end

On Apr 16, 3:46 pm, "john.p" <[email protected]> wrote:
> 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

Reply via email to