首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NotificationManager仅在设备上崩溃

NotificationManager仅在设备上崩溃
EN

Stack Overflow用户
提问于 2013-02-01 20:26:22
回答 1查看 2.8K关注 0票数 4

我有一个我无法解释的问题。我有一个主要的活动,其中包含一个按钮。单击此按钮后,将启动一个新的活动,该活动将从internet下载xml文件。在下载时,有一个通知指示下载进度。

这在我的AVD (API级别17)中工作得很好。但是,当我试图在我的设备中做同样的事情(使用API级别10的GT 1900,android版本2.3.3)时,它就崩溃了。

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

代码语言:javascript
复制
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);

代码语言:javascript
复制
notificationManager.notify(0, notificationBuilder.build());

在下载过程中,我使用了一个DownloadFilesTask (扩展AsyncTask)类,该类已经过测试并运行良好。

下面是异常日志:

代码语言:javascript
复制
    at android.app.NotificationManager.notify(NotificationManager.java:91)

所以我的问题是:如果这个问题确实存在于我的设备的API级别上,谁能解释如何使用通知生成器来降低API。

以下是完整的日志:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-01 21:19:19

在较早的安卓版本中,您的Notification 有一个内容意图,因此当用户单击通知时,会发生一些事情。这意味着你必须:

创建一个Intent对象,指向某个地方,比如您的MainActivity。确保添加Intent.FLAG_ACTIVITY_NEW_TASK标志。

代码语言:javascript
复制
Intent intent = new Intent (this, MainActivity.class);
intent.addFlags (Intent.FLAG_ACTIVITY_NEW_TASK);

将其转换为PendingIntent

代码语言:javascript
复制
PendingIntent pend = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

最后,在构建器中,调用

代码语言:javascript
复制
notificationBuilder.setContentIntent (pend);
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14654414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档