Java 不能';t展开RemoteView-错误通知
最近,我收到越来越多的用户收到RemoteServiceException错误的报告。每次给出的堆栈跟踪如下所示:Java 不能';t展开RemoteView-错误通知,java,android,notifications,remoteview,Java,Android,Notifications,Remoteview,最近,我收到越来越多的用户收到RemoteServiceException错误的报告。每次给出的堆栈跟踪如下所示: android.app.RemoteServiceException: Bad notification posted from package com.smithyproductions.fasttracks: Couldn't expand RemoteViews for: StatusBarNotification(pkg=com.smithyproductions.fast
android.app.RemoteServiceException: Bad notification posted from package com.smithyproductions.fasttracks: Couldn't expand RemoteViews for: StatusBarNotification(pkg=com.smithyproductions.fasttracks id=311095 tag=null score=0 notn=Notification(pri=0 contentView=com.smithyproductions.fasttracks/0x7f03007d vibrate=null sound=null defaults=0x0 flags=0x62 kind=[null]) user=UserHandle{0})
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1523)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:153)
at android.app.ActivityThread.main(ActivityThread.java:5341)
at java.lang.reflect.Method.invokeNative(Method.java)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:929)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)
at dalvik.system.NativeStart.main(NativeStart.java)
我似乎永远无法在HTC Sensation或HTC One X上重现这个问题,这让我相信它可能是特定于设备的。我已从以下设备收到此错误的报告:
- 华为G610 U15
- bq Aquaris 5高清
- 恩斯珀特楼梯
- JYT JY-G5
PendingIntent pi = PendingIntent.getActivity(
getApplicationContext(), 0, new Intent(getApplicationContext(), Showcase.class),
PendingIntent.FLAG_UPDATE_CURRENT);
RemoteViews smallContentView = new RemoteViews(getPackageName(),
R.layout.notif_layout);
nowPlayingNotification = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.notification_icon)
.setContentTitle(
"Playing: "
+ playbackManager.getCurrentTrack()
.getName()).setContentIntent(pi)
.setOngoing(true)
.setWhen(System.currentTimeMillis())
.setContent(smallContentView).build();
然后我为RemoteView按钮设置了所有回调:
Intent playIntent = new Intent(this, RemoteControlReceiver.class);
playIntent.setAction(ACTION_TOGGLE_PLAYBACK);
PendingIntent playPausePendingIntent = PendingIntent.getBroadcast(this,
0, playIntent, 0);
Intent nextIntent = new Intent(this, RemoteControlReceiver.class);
nextIntent.setAction(ACTION_SKIP);
PendingIntent nextPendingIntent = PendingIntent.getBroadcast(this, 0,
nextIntent, 0);
Intent stopIntent = new Intent(this, RemoteControlReceiver.class);
stopIntent.setAction(ACTION_STOP);
PendingIntent stopPendingIntent = PendingIntent.getBroadcast(this, 0,
stopIntent, 0);
nowPlayingNotification.contentView.setTextViewText(R.id.title,
playbackManager.getCurrentTrack().getName());
nowPlayingNotification.contentView.setProgressBar(
android.R.id.progress, 100, mediaProgress, false);
if (notificationIconMixBitmap != null)
nowPlayingNotification.contentView.setImageViewBitmap(R.id.icon,
notificationIconMixBitmap);
else {
nowPlayingNotification.contentView.setImageViewResource(R.id.icon,
R.drawable.notification_icon);
}
nowPlayingNotification.contentView.setOnClickPendingIntent(
R.id.playPause, playPausePendingIntent);
if (playbackManager.getCurrentPlaybackState() == State.Paused) {
nowPlayingNotification.contentView.setImageViewResource(
R.id.playPause, R.drawable.play_icon_solid);
} else {
nowPlayingNotification.contentView.setImageViewResource(
R.id.playPause, R.drawable.pause_icon_solid);
}
if (!playbackManager.isSkipAllowed()) {
nowPlayingNotification.contentView.setImageViewResource(R.id.next,
R.drawable.next_icon_disabled);
} else {
nowPlayingNotification.contentView.setImageViewResource(R.id.next,
R.drawable.next_icon_solid);
}
if (playbackManager.getCurrentPlaybackState() == State.Preparing) {
nowPlayingNotification.contentView.setProgressBar(
android.R.id.progress, 100, mediaProgress, true);
}
nowPlayingNotification.contentView.setOnClickPendingIntent(R.id.next,
nextPendingIntent);
nowPlayingNotification.contentView.setOnClickPendingIntent(R.id.close,
stopPendingIntent);
接
mNotificationManager.notify(NOTIFICATION_ID, nowPlayingNotification);
如果有人知道任何有帮助的东西,可能是4.2.1中的一个公认错误,我们将不胜感激!谢谢,我的手机也有同样的问题 您可以使用以下代码创建通知:
nowPlayingNotification = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.notification_icon)
.setContentTitle(
"Playing: "
+ playbackManager.getCurrentTrack()
.getName()).setContentIntent(pi)
如果您的pending intent->pi Specification intent to Launch设置为空,则应用程序崩溃,如下所示:
PendingIntent pi= PendingIntent.getActivity(
getApplicationContext(),
0,
***null***,
0
);
用new Intent()替换null并测试是否解决了问题
在姜饼上。setcontentIntent(intent)是必需的,否则将抛出IllegalArgumentException。但是在Jellybean中,如果我们删除。setcontentIntent(intent)我在我的构建中看到了类似的问题-只有Kitkat设备大量抛出这些问题-Android操作系统版本:4.4.4、4.4.2、4.2.2、4.0.4 通过更改通知所使用的可绘制文件进行修复
.addAction(R.drawable.ic_forward_black_24dp, VIEW_ACTION, pendingIntentView);
我们停止使用矢量资源,开始使用图像资源
R.drawable.ic_forward_black_24dp不再使用xml文件(矢量资源),而是使用png文件(图像资源)。它在Android 4.2.1上崩溃了吗?我的应用程序的最低api级别是11,所以如果这只是发生在姜饼上,我不认为这是同一回事。事实上,我已经在我的pending Intent中设置了一个Intent,所以我不认为这是答案,但无论如何还是要感谢..如果pending Intent是用null Intent创建的,它会在运行4.3的galaxy手机上崩溃。。我猜4.2.1也应该如此。我刚刚用我使用的待定意图更新了我的问题-我确实使用了意图,而不是null。你解决了这个问题吗?我有同样的问题,我有同样的问题。你找到原因了吗?@Rorster也有同样的问题!你找到解决办法了吗?