2017-02-12 9 views
2

ユーザーが自分のライブラリから音楽を選択し、ゲームが実行されている間にそれらが失敗するまでバックグラウンドで再生するアンドロイド用のゲームを作りたいと思います。ゲームのバックグラウンドミュージックとして選択した音楽を再生する

これは私が持っているコードで、それが選択されているとき、それは歌を果たしているが、それは、私は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(); 
    } 
} 

}

答えて

0

内のコードを変更することを忘れないでくださいクラスMainActivity

private Uri uriSound; 

の分野にonActivityResult内のローカル変数からそれを変換し、urisound取得するには

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

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

}); 

問題は、プレイヤーが準備される前に開始していることです。この図を確認してください。

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

0

を押したときに、私はあなたが実装するのを忘れて考えて遊んでいくしません再生ボタンのOnClickListener。 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

関連する問題