Android: воспроизведение аудиофайлов с использованием одного объекта медиаплеера, а также отображение изображений

мне нужно отображать изображения и воспроизводить соответствующие аудиофайлы один за другим.

я пытался создать несколько объектов медиаплеера, но он показывает error(1, -17)

так что, пожалуйста, помогите, ребята, у меня мало времени.

Прямо сейчас у меня есть обработчик, который воспроизводит аудиофайл, а затем получает продолжительность этого аудиофайла при воспроизведении другого аудиофайла, это мой подход, но я не могу воспроизвести около 10 файлов.

ниже мой пример кода

img.setBackgroundResource(R.drawable.d002_p001);
        d002_ae_p001 = MediaPlayer.create(this, R.raw.d002_ae_p001);
        handler.postDelayed(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                d002_ae_p001.start();
                xml();
            }
        },1000);

        d002_ae_p002 = MediaPlayer.create(this,R.raw.d002_ae_p002);
        handler.postDelayed(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                i++;
                img.setBackgroundResource(R.drawable.d002_p002);
                d002_ae_p002.start();
                xml();
            }
        },d002_ae_p001.getDuration()+2000);

ИЗМЕНИЛ ЭТО МОЙ код

int image[] = {R.drawable.apple,R.drawable.boy,R.drawable.cat};

    String audio[]={"apple_v.mp3","boy_v.mp3","cat_v.mp3"};

    MediaPlayer mp = new MediaPlayer();

    AssetFileDescriptor descriptor;
            try {
                descriptor = getAssets().openFd(audio[i]);
                mp.setDataSource( descriptor.getFileDescriptor(), descriptor.getStartOffset(),descriptor.getLength());
                descriptor.close();
                mp.prepare();
                mp.start();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            mp.setOnCompletionListener(new OnCompletionListener() {

                @Override
                public void onCompletion(MediaPlayer arg0) {
                    // TODO Auto-generated method stub
                    img.setImageResource(image[i]);
                    i++;
                    mp.start();
                }
            });

person Donald    schedule 02.02.2012    source источник


Ответы (1)


Вот мое предложение:

Прежде всего, поместите файлы MP3 в активы, а не в сырые. Этот код будет воспроизводиться из активов:

MediaPlayer mp = new MediaPlayer();

AssetFileDescriptor descriptor;
descriptor = getAssets().openFd( "filename.mp3" );
mp.setDataSource( descriptor.getFileDescriptor(), descriptor.getStartOffset(),         descriptor.getLength() );
descriptor.close();
mp.prepare();
mp.start();

mp.setOnCompletionListener(
new OnCompletionListener(){
@Override 
public void onCompletion(MediaPlayer mp) {  
//code here to change your image, suggest having an array of filenames and incrementing
//each time you pass through. 
}
});

надеюсь, это поможет

person Tony    schedule 02.02.2012
comment
Тони, раньше у меня был массив типа int image[] = {R.raw.apple,R.raw.boy,R.raw.cat}; за активы как можно взять - person Donald; 02.02.2012
comment
Строка изображения [] = {файл1.mp3, файл2.mp3, файл3.mp3}; - person Tony; 02.02.2012
comment
эй, я могу воспроизводить только один аудиофайл, я могу менять изображения, поэтому я дал mp.start() nw его постоянное зацикливание любого решения - person Donald; 02.02.2012
comment
да, я уже отметил, что он может получить ваш почтовый идентификатор, чтобы мы могли поделиться чем-то вроде этого? - person Donald; 02.02.2012
comment
Вот моя страница Google+, не стесняйтесь добавлять меня. plus.google.com/u/0/111365666249481367719/posts - person Tony; 02.02.2012
comment
если вы можете помочь с этим также stackoverflow.com/questions/9075908/ - person Donald; 02.02.2012