2014-12-12 4 views
0

У меня есть приложение, которое помимо прочего имеет встроенную систему обмена сообщениями. (Так что это не sms, электронная почта и так далее). Я использую базу данных (локальную и удаленную) для хранения сообщений между пользователями, а syncAdapter позволяет синхронизировать записи с локального на удаленный и наоборот.Поведение Android-уведомлений

Внутри адаптера синхронизации Я также показываю уведомление, когда новое сообщение поступает на мой планшет. Я использую этот код для его генерации:

String text_notificare_titlu = "Message from " + self.getSursanume(); 
String text_notificare_continut = self.getTitlu(); 
final NotificationManager mgr = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
Notification note = new Notification(R.drawable.new_50, "New message for my app!", System.currentTimeMillis()); 
note.defaults |= Notification.DEFAULT_SOUND; 
note.defaults |= Notification.DEFAULT_VIBRATE; 
note.defaults |= Notification.FLAG_AUTO_CANCEL; 
// This pending intent will open after notification click 
PendingIntent xx = PendingIntent.getActivity(context, i, new Intent(context, MesajeActivity.class), 0); 
note.setLatestEventInfo(context, text_notificare_titlu, text_notificare_continut, xx); 
note.number = i; 
mgr.notify(NOTIFY_ME_ID, note); 

Теперь мои проблемы:

  1. Autocancel не работает. Когда я нажимаю на уведомление, я хочу, чтобы уведомление исчезло после запуска намерения, но оно не
  2. Я хочу, чтобы мое намерение было показано в уведомлении, чтобы указать его конкретный (тот, который содержит INBOX), поэтому MesajeActivity.class. Он появляется, но если мое приложение было сведено к минимуму (скрыто), когда я нажимаю уведомление, новая активность INBOX отображается в верхней части предыдущей активности INBOX. Это похоже на то, что у вас есть два разных вида деятельности друг на друга. Так что если:
    • мое приложение запускается, и пользователь находится в INBOX активности (MesajeActivity.class)
    • через некоторое время дисплей выключается,
    • , когда приходит время, SyncAdapter пожаров,
      • находит новое сообщение,
      • создает уведомление,
    • пользователь нажимает на уведомление,
    • показана активность INBOX,
    • Когда я нажимаю BACK, активность INBOX исчезает и появляется еще одна активность INBOX (активность INBOX ранее открытого приложения).

Понимаете ли вы, или я должен попытаться объяснить лучше?

Как я могу решить эти 2 проблемы?

Спасибо

ответ

1

Я немного не уверен, что именно вы подразумевали под второй частью.Но для вашего ожидающего намерения попробуйте это, PendingIntent pIntent = PendingIntent.getActivity (контекст, i, намерение, PendingIntent.FLAG_UPDATE_CURRENT); Замените 0 на PendingIntent.FLAG_UPDATE_CURRENT

Если это не решит проблему, добавьте строку launchMode в ваше объявление MessageActivity в файле манифеста, как показано ниже. андроид: launchMode = «singleTask»

Вы можете обратиться к http://developer.android.com/guide/topics/manifest/activity-element.html для получения дополнительной информации о singleTask

+0

Замечательно, теперь он отлично работает. Вы правильно поняли, и второе решение, которое вы мне дали, сработало. Теперь клик уведомлений обновляет отображаемую информацию MessagesActivity. спасибо – user1137313

2

если вы поставите

note.flags|= Notification.FLAG_AUTO_CANCEL; 

перед тем mgr.notify вызов, который должен сделать уведомление исчезнет при нажатии на нее.

+0

Вы, кажется, правы, я думаю, что ... сначала я думал, что ты не видел мой код, только потом я понял, вы говорили о другом. У меня в моем коде 'note.defaults | = Notification.FLAG_AUTO_CANCEL;' и вы предложили 'note.flags | = Notification.FLAG_AUTO_CANCEL;'. Любая идея по моему другому вопросу? – user1137313

0

я заменил свой код, который строит уведомление с этим:

Intent intent = new Intent(context, MesajeActivity.class); 
     PendingIntent pIntent = PendingIntent.getActivity(context, i, intent, 0); 
     // Build notification 
     // Actions are just fake 
     Notification noti = new Notification.Builder(context) 
       .setContentTitle("Message from "+ self.getSursanume()) 
       .setContentText(self.getTitlu()).setSmallIcon(R.drawable.new_50) 
       .setContentIntent(pIntent) 
       .addAction(R.drawable.new_50, self.getTitlucont(), pIntent) 
       .build(); 
     NotificationManager notificationManager; 
     notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE); 
     // hide the notification after its selected 
     noti.flags |= Notification.FLAG_AUTO_CANCEL; 
     noti.defaults |= Notification.DEFAULT_VIBRATE; 
     noti.sound = Uri.parse("android.resource://" + context.getPackageName() + "/" + R.raw.htc4); 
     noti.number = i; 
     notificationManager.notify(0, noti); 

Теперь он автоматически отменяется. Кажется, я не установил флаг по-разному. Я сделал это для noti.defaults?!?!? вместо noti.flags Однако мой вопрос номер 2 все еще находится в воздухе.

Что нужно сделать, чтобы отобразить только одну MessajeActivity?

Смежные вопросы