所以我有一個服務,我希望能夠聽到鬧鈴,並在鬧鈴響起時暫時關閉/暫停,然後再恢復。我的服務所做的是在屏幕頂部使用WindowManager擴展視圖 - 這是一個鎖屏應用程序..但是,因此,它始終處於最重要的位置。在鬧鈴期間暫停服務,之後恢復
這很容易實現傳入使用PhoneStateListener進行調用,但我沒有看到任何方便的警報 - 我想我可以實現一個AlarmManager.onAlarmListener,一旦警報響起就關閉我的服務,但我不確定如何將它重新打開之後。
感謝您的幫助!
所以我有一個服務,我希望能夠聽到鬧鈴,並在鬧鈴響起時暫時關閉/暫停,然後再恢復。我的服務所做的是在屏幕頂部使用WindowManager擴展視圖 - 這是一個鎖屏應用程序..但是,因此,它始終處於最重要的位置。在鬧鈴期間暫停服務,之後恢復
這很容易實現傳入使用PhoneStateListener進行調用,但我沒有看到任何方便的警報 - 我想我可以實現一個AlarmManager.onAlarmListener,一旦警報響起就關閉我的服務,但我不確定如何將它重新打開之後。
感謝您的幫助!
終於想通了!
你可以得到一個報警的時間,像這樣:
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.getNextAlarmClock().getTriggerTime()
所以才添加到您的服務onCreate方法:
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
if (alarmManager.getNextAlarmClock() != null) {
UIHandler.postAtTime(new Runnable() {
@Override
public void run() {
stopSelf();
}
}, alarmManager.getNextAlarmClock().getTriggerTime());
}
本質上講它是獲取時間以毫秒爲單位的下一個警報,然後在下一次警報發佈時運行一次。
我相信它只適用於API 21+
也許,你可以嘗試實施AudioManager.OnAudioFocusChangeListener https://developer.android.com/reference/android/media/AudioManager.OnAudioFocusChangeListener.html
@Override
public void onAudioFocusChange(int i) {
if (i <= 0 && i != -3) {
// pause
} else if (i > 0) {
// resume
}
}
}
似乎它可以工作,謝謝! – Rosenpin