RTC_WAKEUP フラグを使用してブロードキャスト インテントを AlarmManager に登録し、指定された時間にオフにするアラーム (一種の) アプリを作成しています。作品...
ブロードキャストが受信されると、レシーバーは STREAM_ALARM ストリームを使用して MediaPlayer で着信音を再生するアクティビティを開始し、その他の処理を行います。すべてうまくいきますが、画面がオフのときにブロードキャストを受信すると、アクティビティは正しく起動しますが、着信音は再生されません。画面がオンでロックが解除されているときに受信すると、正常に動作し、着信音を再生します。
着信音を再生するアクティビティにコードを追加するように編集しました。
public void onCreate(Bundle bundle) {
super.onCreate(bundle)
...
Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
window.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
window.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
ringtonePlayer = new MediaPlayer();
...
playRingtone();
}
private void playRingtone() throws IllegalArgumentException, SecurityException, IllegalStateException, IOException {
ringtonePlayer.setDataSource(prefs.getString(getRingTone(), RingtoneManager.getActualDefaultRingtoneUri(this, RingtoneManager.TYPE_RINGTONE).toString()));
ringtonePlayer.setAudioStreamType(AudioManager.STREAM_ALARM);
ringtonePlayer.setWakeMode(this, PowerManager.PARTIAL_WAKE_LOCK);
ringtonePlayer.setLooping(true);
ringtonePlayer.prepare();
ringtonePlayer.start();
Log.i(LOG_TAG, "Ringtone started");
}