Android - java.lang.IllegalArgumentException:contentIntent由通知引起的必需错误?

时间:2010-06-24 16:41:45

标签: android notifications illegalargumentexception

我有一个服务正在运行,当它收到一条消息说它必须被更改时,会在通知栏中更新通知。

但是,有时在更新通知时会出现以下错误

java.lang.IllegalArgumentException: contentIntent required

这是我的代码:

变量设置


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);   

所以有些事情发生在我的内容的某个地方,这是正确的吗?

它在我的Service类的顶部被声明为一个成员变量,并且除了上面显示的代码之外没有在代码中的任何其他地方使用,所以它可以在哪里重置为null?

4 个答案:

答案 0 :(得分:15)

您需要为通知设置contentIntent。

在你的情况下:

notification.contentIntent = notificationIntent;

否则你会收到消息,通知的contentIntent为null,因为它没有设置。

文件在这里: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

答案 1 :(得分:3)

我认为这是因为Android操作系统版本

版本 2.3或更低,必须设置 contentIntent ,否则,您将收到此例外。

在我的项目中,我这样写:

  

$(document).ready(function() { $('div').mouseenter(function() { $(this).animate({ height: '+=10px' }); }); $('div').mouseleave(function() { $(this).animate({ height: '-=10px' }); }); $('div').click(function() { $(this).toggle(1000); }); });

也许这可以帮到你!

答案 2 :(得分:2)

在你的情况下

  

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

如果您想使用具有相同操作但具有不同附加功能的Intent:

1)改变

  

requestCode

中的默认值“0”
  

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

像`

这样独特的东西
  

(int) System.currentTimeMillis();

` 2)

  

notification.contentIntent = notificationIntent;

这两个步骤都是强制性的,因为:

  • 如果没有选项1,选项2将无效。
  • 选项1将抛出IllegalArgumentException而不使用2。

答案 3 :(得分:0)

在我的情况下,我有一个示例代码要做,只有一个Notification要创建,而且我还有“contentIntent required”错误 - 谷歌把我带到了这个帖子:D

这个问题的根源是我从示例代码中复制并在eclipse项目中粘贴它的引用。当我删除“”并键入它们并解决问题。也许这有助于某人。

这些是引用错误的来源: nb.setContentTitle(“我的第一个通知!”); nb.setContentText( “你好”);