`

android5.0使用Notification报RemoteServiceException的解决办法

阅读更多
有时android5.0下使用Notification会报如下错误信息(比如开启重启动系统就要发送通知)
android.app.RemoteServiceException: Bad notification posted from package *: Couldn't create icon: StatusBarIcon

这个问题多数集中在setSmallIcon(R.drawable.scanner_small)这句代码上,在某些情况下(比如开启重启动系统就要发送通知),R.drawable.scanner_small这个资源尚未准备好,导致了App异常。那怎么办呢?

这是android5.0的bug,在android4.4和6.0中都正常,一般情况下,这没办法解决,如老外说的那样
http://stackoverflow.com/questions/25317659/how-to-fix-android-app-remoteserviceexception-bad-notification-posted-from-pac

不过,如果你不介意图标大小,可以这样写:
setSmallIcon(context.getApplicationInfo().icon)
从ApplicationInfo中拿到应用icon当作SmallIcon。
总之,要抢在系统重启动之前拿到icon,而不至于拿到一个空的resId。

解决思路:
http://stackoverflow.com/questions/24968556/how-to-fix-this-bug-android-app-remoteserviceexception-bad-notification-post

附上我完整的Notification代码
private static final int NOTIFY_ID = 0;
	public static void showCustomNotification(Context context) {
		NotificationManager notificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
		Intent intent = new Intent(context, MainActivity.class);
//		intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);// FLAG_ONE_SHOT
		intent.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
		PendingIntent contentIntent = PendingIntent.getActivity(context, 0,intent, PendingIntent.FLAG_UPDATE_CURRENT);
		NotificationCompat.Builder mBuilder = new Builder(context);
        RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.custom_notify);
        
        boolean isScan=(Boolean)SPUtils.get(context, App.KEY_SCAN, true);
        remoteViews.setTextViewText(R.id.btn_scan,isScan?"隐藏扫描键": "显示扫描键");
        //点击事件处理
        Intent actionIntent = new Intent(App.ACTION_NOTIFICATION);
        actionIntent.putExtra(App.KEY_NOTIFICATION_CLICK, isScan);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 1, actionIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        remoteViews.setOnClickPendingIntent(R.id.btn_scan, pendingIntent);
        mBuilder.setContent(remoteViews)
                .setContentIntent(contentIntent)
                .setTicker("扫描精灵")
                .setWhen(System.currentTimeMillis())
                .setAutoCancel(true)
                .setSmallIcon(context.getApplicationInfo().icon)//采用quick fallback image
				.setDefaults(Notification.DEFAULT_ALL);
        
        Notification notify = mBuilder.build();
        notify.flags = Notification.FLAG_NO_CLEAR;//|Notification.FLAG_ONGOING_EVENT;
        notificationManager.notify(NOTIFY_ID, notify);
	}
分享到:
评论

相关推荐

    Android-21 Android SDK platforms 21(Android5.0)

    综上所述,Android SDK Platforms 21是开发者进入Android 5.0世界的关键,通过使用说明.txt文件,开发者可以了解如何安装和配置这个平台,以便在Android Studio中进行项目开发。同时,android-21文件夹中包含了所有...

    Android 5.0 samples

    在Android开发领域,Android 5.0(代号Lollipop)是一个重要的里程碑版本,它引入了许多新特性、改进和优化,极大地提升了用户体验和开发者的工作效率。这个名为"Android 5.0 samples"的压缩包提供了API Level 21的...

    Android 5.0以上Toast不显示的解决方法

    用户使用android 5.0以上的系统在安装APP时,将消息通知的权限关闭掉了。实际上用户本意只是想关闭Notification,但是Toast的show方法中有调用INotificationManager这个类,而这个类在用户关闭消息通知权限的同时被...

    android5.0

    在这个压缩包文件"android5.0new"中,可能包含了与Android 5.0相关的源代码或者修改过的组件,但描述中提到“有bug”,意味着在研究或使用这些代码时需要留意潜在的问题。 1. Material Design:Android 5.0引入了...

    Android5.0 Music音乐播放器源码

    在Android 5.0(Lollipop)中,官方提供的Music音乐播放器是一个示例应用,展示了如何在Android平台上实现一个功能完备的音乐播放系统。这个源码提供了丰富的学习材料,帮助开发者深入理解Android多媒体框架、服务、...

    Android 5.0 ApiDemo+可运行源码项目

    在使用这个项目之前,需要确保你有一个运行Android 5.0或更高版本的设备,因为某些特定的效果和API只在Android 5.0系统中有效。 **Android 5.0的主要更新和特性** 1. **Material Design**: Android 5.0引入了全新...

    5.0新特性Demo android

    2. **ART运行时**: Android 5.0默认使用ART(Android RunTime)替代了Dalvik,提高了应用程序的性能。Demo可能包含有关如何优化代码以充分利用ART的信息。 3. **多用户支持**: Android 5.0增加了对多个用户账户的...

    Android 5.0 Music 源码

    Android 5.0 Music源码会包含如何使用Notification来显示播放状态,并实现通知栏的音乐控制。此外,利用RemoteControlClient,应用可以参与到系统的媒体控制中心,让用户能在锁屏界面直接操作音乐。 6. **异步加载...

    Android5.0 DeskClock时钟源码

    《深入解析Android 5.0 DeskClock源码》 Android 5.0 DeskClock是一款集成在系统中的桌面时钟应用,它集成了多种功能,包括闹钟、计时器、秒表和世界时间等。这款应用的源码是Android开发者的宝贵资源,通过研究其...

    Android 5.0 源码

    Android 5.0,代号Lollipop,是Google在2014年发布的一个重大更新,带来了许多新特性和性能优化。源码的获取对于开发者和研究者来说至关重要,因为它揭示了系统的底层工作原理和API实现。以下是Android 5.0源码中...

    Android实现Notification的通知栏常驻.zip

    在Android系统中,Notification是一种重要的用户界面元素,用于在状态栏显示应用的提醒或消息。当用户无法直接与应用交互时,例如手机锁屏或在其他应用中,Notification可以帮助用户了解应用的状态并进行相应的操作...

    Android代码-Notification Stopwatch

    Supports Android 4.0 - Android 5.0. Google Play link: https://play.google.com/store/apps/details?id=com.kodarkooperativet.notificationstopwatch Source code is licensed to Apache 2.0

    Android中使用Notification在通知栏中显示通知示例代码.rar

    Android中使用Notification在通知栏中显示通知示例代码.rar Android中使用Notification在通知栏中显示通知示例代码.rar Android中使用Notification在通知栏中显示通知示例代码.rar

    Android中使用Notification提示消息示例

    本示例将详细介绍如何在Android中使用Notification来创建和显示提示消息。 首先,我们需要理解Notification的基本结构。一个Notification通常包括以下部分: 1. **通知图标**:在状态栏显示的小图标,用于快速识别...

    Android5.0源码

    Android 5.0,代号Lollipop,是Google在2014年发布的一个重大更新,带来了许多新特性和性能优化。源码是操作系统开发的核心,对于开发者来说,理解源码能够深入探究Android系统的运作机制,提升应用开发的效率和质量...

    安卓Android源码——notification1.rar

    在安卓(Android)系统中,通知(Notification)是应用程序与用户交互的重要方式,即使应用在后台运行,也能向用户展示信息。"安卓Android源码——notification1.rar"这个压缩包很可能包含了Android系统中关于通知...

    android Notification使用大全

    在Android系统中,Notification是应用与用户交互的重要方式,它可以在状态栏中显示信息,即使用户不在使用应用时也能提醒用户有新的事件发生。本文将深入探讨如何在Android中使用Notification,包括基本用法、自定义...

    Android notification+Service实时更新

    在Android开发中,`Notification`、`Service`和`BroadcastReceiver`是三个核心组件,它们在许多场景下都有着重要的作用,特别是在实现应用后台运行、实时更新等任务时。本项目"Android notification+Service实时更新...

    Android应用源码之notification.zip

    在Android应用开发中,Notification是用户界面中一个重要的组成部分,它允许应用在状态栏中显示信息,即使用户不在与应用交互时也能提醒用户有新的活动或事件发生。本压缩包"Android应用源码之notification.zip"很...

Global site tag (gtag.js) - Google Analytics