android:动态播放音频文件和显示图像

标签 android media-player

大家好,我有 3 个音频文件和三个图像,每个图像显示三个文本。 现在,我在应用程序启动后立即执行的操作是,第一个图像、文本和音频文件开始播放,第二个文件完成后,第三个文件开始播放。

基本上我需要这些一个接一个地动态播放,因为我有大约 20 个与此类似的文件

下面是我的代码

public class S001Activity extends Activity {
    /** Called when the activity is first created. */

    ImageView img;
    TextView display;
    MediaPlayer apple = new MediaPlayer();
    MediaPlayer boy = new MediaPlayer();
    MediaPlayer cat = new MediaPlayer();
    //Runnable rb,rc;

    Document doc;
    DocumentBuilder builder;
    Handler handler = new Handler();

    int i=0;
    int noOfQues = 0;
    //int media[] = {R.raw.apple_v,R.raw.boy_v,R.raw.cat_v};
    //int image[] = {R.drawable.apple,R.drawable.boy,R.drawable.cat};

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        img = (ImageView)findViewById(R.id.img);
        display = (TextView)findViewById(R.id.display);

        img.setBackgroundResource(R.drawable.apple);
        apple = MediaPlayer.create(this, R.raw.apple_v);
        apple.start();
        xml();


        boy = MediaPlayer.create(this, R.raw.boy_v);

        handler.postDelayed(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                i++;
                img.setBackgroundResource(R.drawable.boy);

                boy.start();
                xml();
            }
        },apple.getDuration()+ 2000 );

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

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


    public void xml(){
         try {
            InputStream in = getResources().openRawResource(R.raw.topic1761);
            builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
            doc = builder.parse(in, null);

            NodeList listOfPersons = doc.getElementsByTagName("Point");
            noOfQues = listOfPersons.getLength();
            System.out.println("items======= " + noOfQues);

            Node firstPersonNode = listOfPersons.item(i);

            Element firstPersonElement = (Element) firstPersonNode;

            NodeList firstNameList = firstPersonElement.getElementsByTagName("PracticeText");
            Element firstNameElement = (Element) firstNameList.item(0);

            NodeList textFNList = firstNameElement.getChildNodes();
            display.setText(((Node) textFNList.item(0)).getNodeValue().trim());

        } catch (Throwable t) {
            Toast.makeText(this, "Exception: " + t.toString(), 2000).show();
        }
    }

编辑代码

@Override
    public void onCompletion(MediaPlayer mps) {
        // TODO Auto-generated method stub
        //MediaPlayer mps = new MediaPlayer();

        img.setBackgroundResource(image[i]);
        handler.post(new Runnable() {

              @Override
              public void run() {

                  xml();
                  AssetFileDescriptor afd = getResources().openRawResourceFd(media[i]);
                  mp.reset();
                  try {
                    mp.setDataSource(afd.getFileDescriptor());
                    afd.close();
                    mp.prepare();
                    mp.start();

                } catch (IllegalArgumentException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IllegalStateException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

              }
             });  
    }

最佳答案

您可以使用数组或列表来存储音乐文件、图像文件和文本的列表。
然后在MediaPlayer.OnCompletionListener播放下一个.

编辑:

int media[] = {R.raw.apple_v,R.raw.boy_v,R.raw.cat_v};
MediaPlayer mp = new MediaPlayer();

// in OnCompletionListener,
index = index + 1; //add proper checks
handler.post(new Runnable() {

  @Override
  public void run() {
      AssetFileDescriptor afd = getResources().openRawResourceFd(media[index]);
      mp.reset();
      mp.setDataSource(afd.getFileDescriptor());
      afd.close();
      mp.prepare();
      mp.start();
  }
 });  

我想你可以通过上面的示例代码理解这个想法。

关于android:动态播放音频文件和显示图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9079024/

相关文章:

android - 使用Gracenote SDK Android进行录音

android - 如何使用 android 和 SensorSimulator 获取传感器值并将它们存储在数据库中

android - 我想知道哪个 Activity 类将数据传递给另一个 Activity 类

Android - 如何一次只允许一个 MediaPlayer 实例播放?

delphi - 如何在delphi中获得最大音量?

android - 如何使用 Android 2.3.3 的 MediaPlayer 进行 ShoutCast 流式传输

java - 如何正确停止 "drawing"线程

Android PendingIntent 将您带到一个已经存在的 Activity ?

android - 在android中重用循环媒体播放器

android - 当Android MediaPlayer进入错误循环: error(-38, 0)时如何优雅地恢复