2013-02-01 76 views
4

我有一个问题,我无法解释。我有一个主要的活动,其中包含一个按钮。点击此按钮时,它会启动一个新的活动,从互联网上下载一个xml文件。下载时有一个通知,指示下载进度。NotificationManager仅在设备上崩溃

这在我的AVD(API等级17)中完美工作。但是,当我尝试在我的设备(GT-I1900,API等级10,android版本2.3.3)中做同样的事情时,它会崩溃。

我认为问题存在与我使用的notificationBuilder

Context context = getApplicationContext(); 
notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
notificationBuilder = new NotificationCompat.Builder(this); 
notificationBuilder.setContentTitle("Download Progress").setContentText("Downloading").setSmallIcon(android.R.drawable.stat_sys_download); 

...

notificationManager.notify(0, notificationBuilder.build()); 

对于下载我用我所测试和工程罚款DownloadFilesTask(扩展的AsyncTask)类。

这里是异常日志:

at android.app.NotificationManager.notify(NotificationManager.java:91) 

所以我的问题是:如果在这一问题上与我的设备的API级别存在,任何人都可以解释如何使用通知建设者较低的API。

以下是完整的日志:

02-01 23:06:28.862: E/AndroidRuntime(16860): FATAL EXCEPTION: AsyncTask #1 
02-01 23:06:28.862: E/AndroidRuntime(16860): java.lang.RuntimeException: An error occured while executing doInBackground() 
02-01 23:06:28.862: E/AndroidRuntime(16860): at android.os.AsyncTask$3.done(AsyncTask.java:200) 
02-01 23:06:28.862: E/AndroidRuntime(16860): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274) 
02-01 23:06:28.862: E/AndroidRuntime(16860): at java.util.concurrent.FutureTask.setException(FutureTask.java:125) 
02-01 23:06:28.862: E/AndroidRuntime(16860): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308) 
02-01 23:06:28.862: E/AndroidRuntime(16860): at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
02-01 23:06:28.862: E/AndroidRuntime(16860): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 
02-01 23:06:28.862: E/AndroidRuntime(16860): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 
02-01 23:06:28.862: E/AndroidRuntime(16860): at java.lang.Thread.run(Thread.java:1019) 
02-01 23:06:28.862: E/AndroidRuntime(16860): Caused by: java.lang.IllegalArgumentException: contentIntent required: pkg=com.bakoproductions.easybet id=0 notification=Notification(vibrate=null,sound=null,defaults=0x0,flags=0x0) 
02-01 23:06:28.862: E/AndroidRuntime(16860): at android.os.Parcel.readException(Parcel.java:1326) 
02-01 23:06:28.862: E/AndroidRuntime(16860): at android.os.Parcel.readException(Parcel.java:1276) 
02-01 23:06:28.862: E/AndroidRuntime(16860): at android.app.INotificationManager$Stub$Proxy.enqueueNotificationWithTag(INotificationManager.java:322) 
02-01 23:06:28.862: E/AndroidRuntime(16860): at android.app.NotificationManager.notify(NotificationManager.java:111) 
02-01 23:06:28.862: E/AndroidRuntime(16860): at android.app.NotificationManager.notify(NotificationManager.java:91) 
02-01 23:06:28.862: E/AndroidRuntime(16860): at com.bakoproductions.easybet.XMLParser.downloadXML(XMLParser.java:83) 
02-01 23:06:28.862: E/AndroidRuntime(16860): at com.bakoproductions.easybet.DownloadFilesTask.doInBackground(DownloadFilesTask.java:24) 
02-01 23:06:28.862: E/AndroidRuntime(16860): at com.bakoproductions.easybet.DownloadFilesTask.doInBackground(DownloadFilesTask.java:1) 
02-01 23:06:28.862: E/AndroidRuntime(16860): at android.os.AsyncTask$2.call(AsyncTask.java:185) 
02-01 23:06:28.862: E/AndroidRuntime(16860): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306) 
02-01 23:06:28.862: E/AndroidRuntime(16860): ... 4 more 
+0

什么是完整的例外呢? – Codeman

+0

第二个问题是,您设备上的Android版本是什么? –

回答

6

在较旧的Android版本,您Notification有内容的意图,这样,当用户点击您的通知,东西发生。这意味着您必须:

制作一个Intent对象,指向某处,例如您的MainActivity。确保添加Intent.FLAG_ACTIVITY_NEW_TASK标志。

Intent intent = new Intent (this, MainActivity.class); 
intent.addFlags (Intent.FLAG_ACTIVITY_NEW_TASK); 

将其转换为的PendingIntent

PendingIntent pend = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

最后,在构建器,调用

notificationBuilder.setContentIntent (pend); 
+0

是的,就是这样!非常感谢!!! –