更改安卓通知文本的动态方法

9

我正在尝试创建带有控件的音乐播放器通知。我成功地监听了按钮点击事件,函数也能够正常触发。我所面临的唯一问题是在这些点击事件中更改通知文本。以下是我的尝试:

这个接收器成功接收到调用并完美地触发每一行代码。但我无法更改文本内容。我认为我需要将内容视图重置为通知。如果是这样的话,我该怎么做呢?

@Override
public void onReceive(Context context, Intent intent) {
   String action = intent.getAction();
    if (action.equals("stop")) {
        ABCFragment.stopSong();
        Log.d("Notification","Stopping");
    }else if (action.equals("play")) {
        ABCFragment.togglePlayPause();
        Log.d("Notification","Toggle Play/Pause");
        RemoteViews contentView = new RemoteViews(context.getPackageName(),R.layout.notification_layout);
        contentView.setTextViewText(R.id.songName, "SOME NEW SONG");
    }else if (action.equals("next")) {
        ABCFragment.playNextSong();
        Log.d("Notification","Next");
    }
}

解决方案:

我更新了我的通知类构造函数,传递了一个额外的参数,并使其正常工作!

@Override
public void onReceive(Context context, Intent intent) {
   String action = intent.getAction();
    if (action.equals("stop")) {
        ABCFragment.stopSong();
        Log.d("Notification","Stopping");
    }else if (action.equals("play")) {
        ABCFragment.togglePlayPause();
        Log.d("Notification","Toggle Play/Pause");
        new ABCNotification(context, "SOME NEW SONG");
    }else if (action.equals("next")) {
        ABCFragment.playNextSong();
        Log.d("Notification","Next");
    }
}

构造函数处理新传递的参数。
1个回答

14

您无法真正更改通知的内容。这确实有点烦人,您只需要使用新文本重新构建当前通知以替换它。

我的应用程序有一个上传过程,每3秒钟我们都会更新通知以更改百分比。

因此,只需重新构建通知并使用相同的ID在NotificationManager上调用notify()


哦,现在所有的文档都有意义了。感谢您指出来。我尝试了一下,它运行得很好。我已经更新了我的问题并提供了解决方案。 - Mercurial
6
请注意,如果您希望更新功能优美而不是删除并重新创建(这将导致您的通知被清除并在列表中的其他位置重新弹出),您需要使用 builder.setOnlyAlertOnce(true) 并且必须使用相同的构建器,否则它将不会更新,而是进行怪异的重新创建。 (我已经与此搏斗了几天,但似乎仍无法使按钮更新,它只会添加到现有的按钮上:-() - Jared

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接