2010-06-24 2 views
18

У меня есть служба, которая обновляет уведомление в панели уведомлений, когда получает сообщение о том, что оно должно быть изменено.Android - java.lang.IllegalArgumentException: contentIntent требуется ошибка, вызванная уведомлением?

Однако я получаю следующую ошибку иногда, когда уведомление должно быть обновлено

java.lang.IllegalArgumentException: contentIntent required 

Вот мой код:

Variable установка


int icon = R.drawable.notification; 
CharSequence tickerText = "Test"; 
long when = System.currentTimeMillis(); 
PendingIntent contentIntent; 

Notification notification = new Notification(icon, tickerText, when); 

NotificationManager mNotificationManager; 

NotificationManager Создание


String ns = Context.NOTIFICATION_SERVICE; 
    mNotificationManager = (NotificationManager) getSystemService(ns); 

Создание Уведомление


Intent notificationIntent = new Intent(this, TestsApp.class); 
    contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); 
    notification.flags |= Notification.FLAG_NO_CLEAR; 
    notification.icon = R.drawable.notification3; 
    notification.setLatestEventInfo(this, "Registering", "Test", contentIntent); 
    mNotificationManager.notify(1, notification); 

Обновление Уведомление


notification.icon = R.drawable.notification2; 
    notification.setLatestEventInfo(getApplicationContext(), "Registered", "Test", contentIntent); 
    mNotificationManager.notify(1, notification); 

Так что-то происходит, мой contentIntent где-то вдоль линии, это будет правильно?

Он объявлен в верхней части моего класса сервиса как переменная-член и не используется где-либо еще в коде, кроме указанного выше, поэтому, где он может быть сброшен до нуля?

ответ

15

вам необходимо установить contentIntent для вашего уведомления.

в вашем случае:

notification.contentIntent = notificationIntent; 

иначе вы получите сообщение, что contentIntent уведомления является недействительным, так как он не установлен.

доку здесь: http://developer.android.com/reference/android/app/Notification.html#contentIntent

У меня есть маленький пример здесь: http://united-coders.com/nico-heid/show-progressbar-in-notification-area-like-google-does-when-downloading-from-android

+5

Не все версии Android требуют этого. У меня был случай, который отлично работал на все, кроме Kindle Fire. –

+4

Знаете ли вы, что я делаю, если я не хочу намерения стрелять при нажатии на уведомление? Я просто хочу, чтобы он был там, пока система что-то делает, и это будет продолжаться. –

+0

для моего случая, показывая уведомлениеBar из Сервиса, это будет mBuilder.setContentIntent (PendingIntent.getActivity (это, 0, новый Intent(), 0)); – toantran

2

В вашем случае

contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);

, если вы хотите использовать Intents с таким же действием, но различными дополнительными услугами:

1) Изменить

requestCode

от дефолта "0" в

getActivity (Context context, int requestCode, Intent intent, int flags)

что-то уникальное, как `

(int) System.currentTimeMillis();

` 2)

notification.contentIntent = notificationIntent;

Оба шага являются обязательными, так как:

  • Вариант 2 не будет работать без опции 1.
  • Вариант 1 выбросит IllegalArgumentException без 2.
0

В моем случае, у меня был пример кода, чтобы сделать, с помощью одного уведомления о создании, и я также получил ошибку «contentIntent» - google привел меня в эту тему: D

источником этой проблемы были цитаты, которые я скопировал из примера кода и вставил в проект eclipse. Когда я удалил "" и набрал их обратно, и проблема была решена. Может быть, это помогает кому-то.

Это были котировки источника ошибки: nb.setContentTitle («Мое первое уведомление!»); nb.setContentText ("Hello");

3

Я думаю, это потому, что Android OS Version

Версия 2,3 или ниже, необходимо установить contentIntent, если нет, то вы получите это исключение.

В моем проекте, я пишу так:

if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB) { Intent intent = new Intent(); PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intent, 0); mNotification.contentIntent = contentIntent; }

Возможно, это может помочь вам!

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