首先,我昨天开始使用Android编程。我正在制作一个String,在每个选择中我都想播放不同的声音。好的,我有一个,但是在另一个选择中播放相同的声音,因为我不知道该怎么做。也许有不同情况的开关?谢谢
现在我有此代码。

import android.app.ListActivity;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class sonidos extends ListActivity {
   public String[] frases = {
        "cake",
        "butter",
        "apple",

   };
   @Override
   public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, frases));
   }
   public void onListItemClick(ListView parent, View v){
        this.setVolumeControlStream(AudioManager.STREAM_MUSIC);
        setContentView(R.layout.sonidos);
   }
   public void onListItemClick(ListView parent, View v, long id){
        MediaPlayer sound = MediaPlayer.create(sonidos.this, R.raw.dtrain);
        if (sound.isPlaying()) {
          sound.stop();
        } else {
                try {
                     sound.start();
                } catch (IllegalStateException e) {
                     e.printStackTrace();
                }
        }
   }
}

最佳答案

如果您使用assets文件夹中的声音,则可以使用以下内容:

public void onListItemClick(ListView parent, View v, long id){
    MediaPlayer player = new MediaPlayer();
    AssetFileDescriptor afd;
    try {
        switch(id)
        {
            case 1: afd = getAssets().openFd("cake.mp3"); break;
            case 2: afd = getAssets().openFd("butter.mp3"); break;
            default : afd = getAssets().openFd("apple.mp3"); break;
        };
        player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
        player.prepare();

    } catch (IOException e) {
        e.printStackTrace();
        SM.Exception("## Exception playing sound!");
    }

    if (player.isPlaying()) {
          player.stop();
        }
    else {
            try {
                 player.start();
            } catch (IllegalStateException e) {
                 e.printStackTrace();
            }
        }
}

希望这可以帮助。

10-04 10:32