如何从后台服务中显示通知?

10

我正在开发的项目有两个不同的应用程序,一个是服务器,另一个是客户端。服务器应用程序有一个服务类,在onStartCommand()函数中启动服务器线程。服务器线程的类定义在服务类本身中。每当服务器从客户端接收到任何数据时,它都会将其存储在数据库中。所以问题是,我想通过通知或toast消息通知用户新数据已到达,无论哪种方式都可以。请告诉我在哪里编写通知代码,我应该在服务类、线程类还是启动服务器服务的firstActivity类中编写。谢谢。


1
可能是重复的问题:在Android中从服务发送通知 - Reno
@Reno:我已经参考了这篇文章,但是我不明白应该把那段代码放在哪里,而且那段代码是不完整的。我是Android的初学者。 - sagar
2个回答

10

首先,您需要阅读这篇关于如何使用通知(Notification)的文章。

接下来,使用这个代码在服务(Service)类中接收客户端数据的位置发送一个通知。

NotificationManager notificationManager =
    (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
int icon = R.drawable.notification_icon;
CharSequence notiText = "Your notification from the service";
long meow = System.currentTimeMillis();

Notification notification = new Notification(icon, notiText, meow);

Context context = getApplicationContext();
CharSequence contentTitle = "Your notification";
CharSequence contentText = "Some data has arrived!";
Intent notificationIntent = new Intent(this, YourActivityThatYouWantToLaunch.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);

notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);

int SERVER_DATA_RECEIVED = 1;
notificationManager.notify(SERVER_DATA_RECEIVED, notification);

3
我是否理解错误?你的服务器应用程序和客户端应用程序都在同一台Android设备上吗?
无论如何,请查看ApiDemos中的代码,以获取通过服务发送通知的代码。
由于您可能要处理远程服务器(而不是本地服务器)以及与网络相关的所有延迟问题,因此我认为您最好将服务包装在AsyncTask中。
还要了解广播接收器,注册的广播接收器可以是触发服务/活动的绝佳方式,而无需您自己的服务无限循环轮询。

谢谢!我的服务器和客户端应用程序在不同的模拟器上运行,数据传输和存储在数据库中没有问题。我会看一下广播接收器。有没有办法检测数据库表中是否有变化?这样如果发现更改,我就可以从活动类通知用户。 - sagar
正如您所说,我已经使用广播接收器,并且它正在工作,但是我想发送一个字符串并在Toast消息中显示该字符串。我已经使用了intent.putextra()。但是在接收端,我收到了空值,我认为问题在于我的get extra代码,请问您如何接收广播意图发送的数据。 - sagar

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