Я пишу программу, которая отслеживает несколько различных событий и создает уведомления в строке состояния, когда выполняются определенные условия. Идея заключается в том, что в зависимости от конкретного условия воспроизводятся разные звуки уведомлений, чтобы пользователь мог знать, что происходит, не глядя на телефон. Все уведомления создаются с разными идентификаторами (сейчас используются случайные числа, хотя я могу изменить это позже), чтобы они не перекрывали друг друга. Все они отображаются в строке состояния и воспроизводят соответствующие звуки уведомлений.
Пока все хорошо, но здесь есть проблема. Основной цикл программы в сервисе спит в течение заданного времени, затем просыпается и проверяет все условия, создавая необходимые уведомления. Часто возникает необходимость создания двух или более уведомлений подряд. Здесь возникает проблема, воспроизводится только звуковое оповещение о последнем появившемся уведомлении. Таким образом, пользователь никогда не узнает, что было только одно уведомление о различных событиях только из звука.
В любом случае это можно исправить? Заранее спасибо!
UPDATE:
После прочтения некоторых комментариев и возни немного больше, похоже, я знаю ПОЧЕМУ это происходит, но не КАК это исправить. Таким образом, вопрос по-прежнему остается открытым. Когда два уведомления всплыли из-за того, что телефон был довольно занят (читаю медленно, чтобы ответить), я услышал начало первого звука, который затем был принят вторым. Похоже, что система честно пытается воспроизвести первый звук, но когда появляется второе уведомление, она просто устанавливает новый звук, отменяя первое воспроизведение ... Так что, я думаю, мне нужно попытаться выяснить, есть ли способ попросить систему воспроизвести их последовательно, а не сразу ...
UPDATE2:
На данный момент - добавлен код, чтобы убедиться, что между любыми двумя создаваемыми уведомлениями есть не менее 5 секунд, и это решает проблему. Как я упоминал в комментариях ниже, я не думаю, что это лучшее решение, поэтому, хотя это позволяет мне продолжить работу над проектом, я все еще ищу лучший способ сделать это.
Вот код, который создает уведомление:
public void ShowNotification(String Ticker, String Title, String Text,Hero H, Uri Sound, int Icon){
String ns = Context.NOTIFICATION_SERVICE;
NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns);
CharSequence tickerText = Ticker;
long when = System.currentTimeMillis();
Notification notification = new Notification(Icon, tickerText, when);
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notification.sound=Sound;
Context context = getApplicationContext();
CharSequence contentTitle = Title;
CharSequence contentText = Text;
Intent notificationIntent = new Intent(this, AlertActivity.class);
notificationIntent.putExtra(getString(R.string.FROM_NOTIFICATION), true);
PendingIntent contentIntent = PendingIntent.getActivity(this, rnd.nextInt(), notificationIntent, 0);
notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
try{
mNotificationManager.notify(rnd.nextInt(), notification);
} catch(Exception e) {
Log.w("Service", "Notification Exception: " + e.toString());
}
}