アラーム音を再生するためにサービスを使用するAndroidアラームアプリケーションを作成しています。現在、オーディオを再生することはできますが、デバイスの音量を下げることでミュートできる形式で再生されます。したがって、これを防ぐためにsetAudioStreamType(AudioManager.STREAM_ALARM);
への呼び出しを追加しようとしています。(Android MediaPlayer)MediaPlayer.create()が暗黙的にprepare()を呼び出すと、setAudioStreamType()をどのように呼び出すのですか?
私はサービスのための私のonStartCommand()
機能については、以下があります。
MediaPlayer mMP;
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
try
{
mMP = MediaPlayer.create(this, R.raw.alarm);
mMP.setAudioStreamType(AudioManager.STREAM_ALARM);
mMP.setLooping(true);
//mMP.prepare(); commented out since prepare() is called in create
}
catch (Exception e)
{
e.printStackTrace();
}
if (mMP != null) mMP.start();
return START_STICKY;
}
私の問題はsetAudioStreamType()の呼び出しで、MediaPlayerのは決してオーディオを再生しないということです。私がそのラインをコメントアウトすると、オーディオが再生されます。
04-10 19:32:03.115:E/MediaPlayerの(3411):状態で呼び出さsetAudioStream 8
、私は、次のランタイムエラー(複数可)を得るの線で
04-10 19:32:03.115:E/MediaPlayerの(3411):エラー(-38、0)
04-10 19:32:03.115:E/MediaPlayerの(3411):状態で呼び出さスタート0
04-10 19:32:03.115:E/MediaPlayer(3411):エラー(-38、0)
04-10 19:32:03.115:E/MediaPlayerの(3411):エラー(-38,0)
04-10 19:32:03.115:E/MediaPlayerの(3411):エラー( - 38,0)
いくつかの研究では、(私は今のリンクを見つけることができません)setAudioStreamType()
がprepare()
が呼び出された後に呼び出され、create()
が暗黙的prepare()
を呼び出すことできないことを私に言いました。
どのような点においても、どうすればsetAudioStreamType()
にこのようなエラーはありませんか?
を働いている( ')(作成'への呼び出し後に開始):; '' setAudioStreamType(); '' setLooping(); ')(リセット' 'prepare();' 私は正しいですか? 「04-10 20:06:25.515:E/MediaPlayer(845):状態1で呼び出しが開始されました」 '04-10 20:06:25.515:E/MediaPlayer(845):状態1で呼び出しが開始されました。 MediaPlayer(845):エラー(-38,0) ' – finiteloop
実際には' prepare() 'ではなく' start() 'の呼び出しでエラーが発生しているようです。更新されたコードを質問に追加できますか? – kcoppock
あなたは正しいです、その特定のエラーは、開始の呼び出しの後に発生しました、また、私がコメントを投稿していたときに私がログに欠けている準備をするための呼び出しにエラーがあります。 '04-10 21:42:11.896:E/MediaPlayer(593):状態1で呼び出されたprepareAsync。 – finiteloop