2011-08-14 48 views
11

次のコードを使用してアプリケーションのメディアプレーヤーのオーディオストリームを設定しようとしましたが、これを行うとエミュレータでサウンドが聞こえません。私がプレーヤーのストリームを設定しないと、オーディオは正常に再生されます。私はこれを間違って使っていると確信していますが、どのように助けてくれるのですか?Android MediaPlayer - STREAM_ALARMでの再生方法

MediaPlayer player = MediaPlayer.create(getApplicationContext(), R.raw.test_audio); 

AudioManager audioManager = (AudioManager) getApplicationContext().getSystemService(Context.AUDIO_SERVICE); 
audioManager.getStreamVolume(AudioManager.STREAM_ALARM); 
audioManager.setStreamVolume(AudioManager.STREAM_ALARM, audioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM), AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE); 
player.setAudioStreamType(AudioManager.STREAM_ALARM); 
player.start(); 

注:既にマニフェストにMODIFY_AUDIO_SETTINGS権限を追加しました。

ありがとうございます!

答えて

0

は、以下のことを試してみてください。

player.setAudioStreamType(AudioManager.STREAM_ALARM); 
player.prepare(); 
player.start(); 

そして、なぜあなたは呼んでいる "audioManager.getStreamVolume(AudioManager.STREAM_ALARM);"?それはかなり無駄ですので、値は、変数に格納されていない;)

私は、これは、作品の下にしかしコードが起こるでしょう、なぜ私にはわからない

+0

私はplayer.prepare()で試しましたが、何の違いもありませんでした。まだオーディオは再生されていません。私は後で私のアプリケーションで使用される変数にストリームボリュームを格納していた、私は割り当てを一時的にデバッグを助けるために取り出した。 – James

19

を助け願っています。 create()ではなく、setDataSource()を使用してデータソースを設定する必要があります。

このコードは動作します:

MediaPlayer mp = new MediaPlayer(); 
mp.setAudioStreamType(AudioManager.STREAM_ALARM); 
mp.setDataSource(this,Uri.parse("android.resource://PACKAGE_NAME/"+R.raw.soundfile)); 
mp.prepare(); 
mp.start(); 

このコード仕事しません:

MediaPlayer mp = MediaPlayer.create(this, R.raw.soundfile); 
mp.setAudioStreamType(AudioManager.STREAM_ALARM); 
mp.prepare(); 
mp.start(); 
+1

uriを書く方が良い: 'Uri.parse(" android.resource:// "+ mContext.getPackageName()+"/"+ R.raw.sound" –

2

1. setAudioStreamType(int型streamtype)

は、(準備の前に、このメソッドを呼び出す必要があります);成功した

2. MediaPlayer.create(コンテキストコンテキスト、int型の残油)

、(準備)がすでに呼び出されているでしょうし、再び呼び出されてはいけません。

3

問題はMediaPlayer.create()を使用してMediaPlayerを作成していることです。 Createファンクションはprepare()ファンクションを呼び出してメディアをファイナライズし、AudioStreamTypeを変更することはできません。

解決策ではなくcreatesetDataSourceを使用している:

MediaPlayer mp = new MediaPlayer(); 
mp.setAudioStreamType(AudioManager.STREAM_ALARM); 
mp.setLooping(true); 
try { 
    mp.setDataSource(getApplicationContext(), yourAudioUri); 
    mp.prepare(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
mp.start(); 

詳細についてはthis linkを参照してください。