2011-10-09 42 views
7

我正在進行的項目有兩個不同的應用程序,1個是服務器,另一個是客戶端。服務器應用程序有1個服務類,它在onStartCommand()函數中啓動服務器線程。服務器線程的類在服務類本身中定義。每當服務器從客戶端接收到任何數據時,它都會存儲在數據庫中所以問題是,我想通知用戶通過通知或吐司消息已經到達新數據,只要有可能。另外告訴我,我應該在哪裏編寫通知代碼,是否應該寫入服務類或線程類或從中啓動服務器服務的類。謝謝。如何顯示來自後臺服務的通知?

+1

[從Android中一個服務發送通知]的可能重複(http://stackoverflow.com/questions/1207269/sending-a-notification-from-a-service-in-android) – Reno

+0

@裏諾:我已經提到這篇文章,但我不明白我應該在哪裏放置該代碼,還有代碼不完整。我是Android的初學者。 – sagar

回答

3

我是不是讀錯了?您的服務器應用程序和您的客戶端應用程序都在同一個Android設備上?

在任何情況下,請查看ApiDemos以瞭解通過服務進行通知的代碼。

而且由於您可能要處理遠程服務器(而不是本地服務器)以及與網絡相關的所有延遲問題,因此我認爲您最好將您的服務包裝在AsyncTask中。

同時瞭解廣播接收器,已註冊的廣播接收器可以是觸發服務/活動的好方法,無需您無限循環地進行自己的服務輪詢。

+0

謝謝!我的服務器和客戶端應用程序運行在不同的模擬器上,數據傳輸沒有問題,並將其存儲在數據庫中。我會看看廣播接收器。有什麼辦法可以檢測到數據庫表有變化嗎?所以,如果發現更改我可以通知活動類的用戶。 – sagar

+0

正如你所說,我已經使用廣播接收器,它正在工作,但我想發送1個字符串與廣播並顯示在烤麪包味精字符串。我用過intent.putextra()。但在接收端,我收到空值,我認爲問題是在我得到額外的代碼,你可以告訴我如何接收通過廣播意圖發送的數據。 – sagar

9

首先您需要閱讀這篇關於如何使用Notifications的文章。

接下來使用它發送通知,您可以在從客戶端接收一些數據的位置將此代碼寫入服務類中。

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);