Android 添加<;碎片>;在通知布局中?

Android 添加<;碎片>;在通知布局中?,android,Android,我正在为android开发一个音乐播放器应用程序,我遇到了通知布局的问题。似乎我无法在其中添加任何复杂元素,或者它会抛出android.app.RemoteServiceException:Bad notification 问题是我写了一个播放器控制器,它是一个片段。我找不到如何手工在代码中添加片段,所以我直接在XML布局中尝试,但没有成功。我写的自定义ImageView也有问题 我真的必须复制代码吗?看起来您不能添加片段。你可以看看是否适合你的需要。在通知生成器中,您可以添加.setStyle

我正在为android开发一个音乐播放器应用程序,我遇到了通知布局的问题。似乎我无法在其中添加任何复杂元素,或者它会抛出
android.app.RemoteServiceException:Bad notification

问题是我写了一个播放器控制器,它是一个片段。我找不到如何手工在代码中添加片段,所以我直接在XML布局中尝试,但没有成功。我写的自定义ImageView也有问题


我真的必须复制代码吗?

看起来您不能添加片段。你可以看看是否适合你的需要。在通知生成器中,您可以添加
.setStyle(NotificationCompat.MediaStyle)
。否则,您可能需要将
Notification.Style
NotificationCompat.Style
子类化才能创建自定义布局。它还显示了一些选项,您可以在创建通知时拦截通知。查看更多详细信息

编辑: 考虑到您的时间范围,如果您愿意调整一些布局,那么我只需在通知中添加按钮。为您希望能够从通知中执行的每个操作(播放、暂停、跳过)创建挂起的意图。作为一个代码示例,我已经包含了一个如何在通知中放置Dismise按钮的缩写版本

Intent resultIntent = new Intent(context, AlarmScreen.class);
    resultIntent.putExtra("Id",reminder.getId());

PendingIntent resultPendingIntent =
            PendingIntent.getActivity(
                    context,
                    reminder.getId()*2,
                    resultIntent,
                    PendingIntent.FLAG_UPDATE_CURRENT
            );

Notification.Builder mBuilder =
            new Notification.Builder(context)
           .setStyle(new Notification.BigTextStyle()
                            .bigText(reminder.getDescription()))
           .addAction(R.drawable.ic_stat_content_clear, "Dismiss", dismissPendingIntent)
           .build();
在您的情况下,您应该能够用适当的图标替换
R.drawable.ic\u stat\u content\u clear
,并可能跳过文本。您只需为所需的每个按钮重复
.addAction()
。还要注意我在挂起的意图声明中的
提醒.getId()*2
?我发现如果我的两个按钮都有相同的编号,我会得到奇怪的结果,因此我的一个按钮有
id*2
,另一个按钮有
id*2+1


至于如何处理按钮发送的意图,您必须创建一个
BroadcastReceiver
来接收它们,并根据您实现其余逻辑的方式来确定从哪里开始。

这是不可能的。通知只能与RemoteView一起使用。RemoteView只支持一些视图,不支持自定义视图或片段。

通知只允许您构建一个可以与
RemoteView一起使用的东西,它也不支持自定义视图。这就是我担心的:/Notification,由于安全原因,AppWidget必须使用RemoteView。这就是为什么RemoteView不灵活的原因。我将对此进行研究。谢谢。
NotificationCompat.MediaStyle
仅在API 21表示安卓5.0之后才可用,而我仍然使用安卓4(CM11),因此无法使用。我不太明白
NotificationCompat.Style
是如何工作的。文件有点小,你有线索吗?我错过了。你可能对这个答案感兴趣:对不起,我不完全明白。这是一个学校项目,我没时间了。我已经编写了一个播放控件,它扩展了
片段
(而不是
MediaController
),我只想以最简单的方式在通知中显示它,因此如果有任何方法我可以处理这个问题,通过覆盖
通知compat.Style
,也许你能给我一段代码或其他什么吗?非常感谢。我已经更新了我的答案,为您提供了一个(相对)快速的解决方案。我使用的Notification.BigTextStyle是API 16,所以它应该适合您。