Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
动态更改android通知文本_Android_Android Notifications_Android Remoteview - Fatal编程技术网

动态更改android通知文本

动态更改android通知文本,android,android-notifications,android-remoteview,Android,Android Notifications,Android Remoteview,我正在尝试为带有控件的音乐播放器发出通知。我正在成功地侦听按钮单击事件,并且函数正在正确启动。我面临的唯一问题是更改这些单击事件的通知文本。 这是我正在尝试的 这是成功接收呼叫并完美发射每条线路的接收器。但是我不能改变文本。我想我必须将内容视图重置为通知。如果是,我该怎么做 @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if

我正在尝试为带有控件的音乐播放器发出通知。我正在成功地侦听按钮单击事件,并且函数正在正确启动。我面临的唯一问题是更改这些单击事件的通知文本。 这是我正在尝试的

这是成功接收呼叫并完美发射每条线路的接收器。但是我不能改变文本。我想我必须将内容视图重置为通知。如果是,我该怎么做

@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");
    }
}

构造函数正在处理新传递的参数。

您不能在通知时真正更改内容。确实有点烦人,你只需要用新的文本替换当前的通知

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


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

噢,现在所有文档都有意义了。谢谢你指出这一点。我试过了,效果很好。我用解决方案更新了我的问题。另外,请记住,如果你想让它很好地更新,而不是删除它并重新创建(这将使你的通知被删除并在列表中的其他位置重新弹出),你需要使用
builder.setOnlyAllertOnce(true)
,并且你必须使用相同的生成器,否则它不会更新,它会做一些愚蠢的娱乐活动。(我已经为此奋斗了好几天,但我仍然无法让它更新按钮,它只会在现有按钮的基础上添加它们:-()