播放选定的音乐作为游戏的背景音乐

问题描述:

我想为Android制作游戏,用户从其库中选择音乐,然后在游戏运行时播放背景,直至失败。播放选定的音乐作为游戏的背景音乐

这是我的代码,它播放歌曲时,它的选择,但它并没有继续玩时,我按OK按钮

public class MainActivity extends AppCompatActivity { 

MediaPlayer mp; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Button openFile = (Button) this.findViewById(R.id.openFile); 
    openFile.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI); 
      startActivityForResult(intent, 10); 
     } 

    }); 
    Button play = (Button) this.findViewById(R.id.button2); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

    if(resultCode == RESULT_OK && requestCode == 10){ 
     Uri uriSound=data.getData(); 
     play(this, uriSound); 
    } 
} 

private void play(Context context, Uri uri) { 

    try { 
     MediaPlayer mp = new MediaPlayer(); 
     mp.setDataSource(context, uri); 
     mp.start(); 
    } catch (IllegalArgumentException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (SecurityException 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(); 
    } 
} 

}

代码问题是你在玩家准备好之前就开始做了,看看这张图

https://image.slidesharecdn.com/mediaplayer-110716092828-phpapp02/95/android-media-player-9-728.jpg?cb=1310809360

private void play(Context context, Uri uri) { 
    MediaPlayer mp = new MediaPlayer(); 
    mp.setDataSource(context, uri); 
    mp.prepareAsync(); 
    mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
     @Override 
     public void onPrepared(MediaPlayer mediaPlayer) { 
      mediaPlayer.start(); 
    } 
    }); 
}} 

尝试这样的事情。

+0

我试过但仍不播放音乐,也许它可能与上下文有关? – PunishedSky

+0

我不这么认为,如果是这样的话,它会说上下文为null,请尝试在MediaPlayer.create(...)行后添加此行=> player .prepareAsync(); – yanivtwin

+0

它似乎不执行什么内置的onPrepared – PunishedSky

我想你忘了执行播放按钮的OnClickListener。

Button play = (Button) this.findViewById(R.id.button2); 
play.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     play(this, uriSound); 
    } 

}); 

为了得到urisound,它在onActivityResult本地变量转换为类MainActivity的领域

private Uri uriSound; 

不要忘记改变onActivityResult

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

    if(resultCode == RESULT_OK && requestCode == 10){ 
     uriSound=data.getData(); 
     play(this, uriSound); 
    } 
} 
+0

谢谢你的回答!这解决了我保存歌曲路线的问题,但是当我按下播放按钮时它仍然不播放。 – PunishedSky