2012-03-28 8 views
1

Androidのアラームアプリを作成しています。私は、アラームが発せられたとき(電話機を起動させ、キーガードをオフにしてアラーム表示を表示する)、すべての権利を得ることができますが、私の人生にとっては、アラームが解除されるとデバイスはスリープモードになります。 (デバイスが起きていて、キーガードがオンになっていると完全に鳴ります。)ウェイクロックを使用しています。 MediaPlayerとSoundPoolを使用してみましたが、成功しませんでした。私が行方不明としている許可はありますか?スリープモードから目を覚ましたときに音声が再生されない(アンドロイド)

SoundPoolを使用してデバッグするとき、有効なサウンドID整数(1)を返すロードを実行しますが、onLoadCompleteリスナー(これはサウンドが再生される場所です)を実行します。解雇されることはありません。それは、デバイスが起きているときにはうまくいきます。

誰もが考えているか、同じ問題が発生していますか?

+1

解決策を見つけました!クラスのonCreate()メソッドでオーディオを再生する呼び出しがありました。私はonResume()に移動しました。これは、デバイスが完全に目を覚ましていて、アクティビティが上に表示され、フォーカスがあることを知っているときです。 – user1299177

答えて

3

解決策を見つけました!クラスのonCreate()メソッドでオーディオを再生する呼び出しがありました。私はonResume()に移動しました。これは、デバイスが完全に目を覚ましていて、アクティビティが上に表示され、フォーカスがあることを知っているときです。

+0

は私に1トンのトラブルを救った...ありがとう。 – DrkStr

+0

onStart()はonCreate()の後に常に呼び出されるため、onResume()で常にそうであるとは限りません。乾杯! –

0

私は最近、同じ問題に遭遇しました。私がこれを解決したのはあなたの答えを読んでいただけでなく、起こっていたことを記録することによって活動の流れをチェックしていました。基本的にonCreate,onStart,onResume,,onStop,onStart,onResumeの順で焼成されていた。これはアラーム画面として開始されたアクティビティでした。

onStartメソッドで初期化コードを使用しましたが、ローカルサウンドを使用しているので、prepareAsync()の代わりに.prepare()を必ず使用しています。

try { 
    Log.d(LOG_TAG, "Setting media player URI: " + alarmTone.toString()); 
    //mMediaPlayer = MediaPlayer.create(this,); 
    mMediaPlayer = new MediaPlayer(); 
    mMediaPlayer.setDataSource(getApplicationContext(), alarmTone); 
    mMediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM); 
    mMediaPlayer.setLooping(true); 
    mMediaPlayer.setVolume(100, 100); 
    mMediaPlayer.prepare(); 
} catch (Exception ex) { 
    Log.d(LOG_TAG, "Exception from media player: " + ex.getMessage()); 
} 

が続いとonStopメソッドの内部で、私が追加しました:私は、コードを再生するメディアを追加onResumeメソッド内

if (mMediaPlayer != null && mMediaPlayer.isPlaying()) { 
    mMediaPlayer.pause(); 
} 

if (mMediaPlayer != null && !mMediaPlayer.isPlaying()) { 
    Log.d(LOG_TAG, "Playing alarm through Media Player"); 
    mMediaPlayer.start(); 
} 

Huzzahを、それが動作します!

関連する問題