java - 如何使用 sse android 发布通知
问题描述
我正在尝试从服务器获取数据并将其发布在屏幕上并推送通知。数据是一个随机数,它每秒都在变化。打开时,服务器正在后台工作并且正在接收数据,但数据一次在屏幕上发布,它没有改变,我无法收到通知。使用按钮,数据完美地发布在屏幕上,并且每秒都在变化,但我无法再次收到通知。
import android.view.View;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationManagerCompat;
import android.os.Bundle;
import com.star_zero.sse.EventHandler;
import com.star_zero.sse.EventSource;
import com.star_zero.sse.MessageEvent;
//STAR-ZERO/sse-android
public class MainActivity extends AppCompatActivity {
static TextView s;
String a =null;
private final String CHANNEL_ID = "server_notifications";
private final int NOTIFICATIONS_ID = 1;
public EventSource eventSource;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
s=findViewById(R.id.random);
final NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
final NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID);
eventSource = new EventSource("path", new EventHandler() {
@Override
public void onOpen() {
}
@Override
public void onMessage(MessageEvent messageEvent) {
a=messageEvent.getData();
try {
builder.setPriority(NotificationCompat.PRIORITY_MAX)
.setAutoCancel(true)
.setContentText(a)
.setContentTitle("ALERT!!!")
.setSmallIcon(R.drawable.noti_icon);
notificationManager.notify (NOTIFICATIONS_ID,builder.build());
s.setText(a);
}
catch (Exception e){
e.printStackTrace();
}
}
@Override
public void onError(Exception e) {
try {
s.setText("error");
}
catch (Exception d) {
d.printStackTrace();
}
}
});
eventSource.connect();
findViewById(R.id.button_open).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
eventSource.connect();
}
});
findViewById(R.id.button_close).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
eventSource.close();
}
});
}
}
解决方案
您不应该在每个通知上构建新通知,onMessage
而是维护全局通知引用并更新内容。有关更多详细信息,请参阅此回复:更新通知文本,而不是整个通知
推荐阅读
- typescript - 如何将密钥与先前省略的密钥类型合并回来?
- pyspark - 从列表中创建 pyspark 数据框?
- mysql - Mysql 迁移后 Woocomerce 类别不起作用
- ios - 捕获先前的 GPU 帧
- c# - ModelState 无效,因为
- asynchronous - Flutter 和外部 JAR 库:android.os.NetworkOnMainThreadException
- python - Python包依赖导致错误
- azure-cosmosdb - SqlQuerySpec 参数化查询不返回结果
- php - 如何在 search.php 中使用 wp 循环
- typescript - Visual Studio 2017 CE 中的 TypeScript 调试不起作用