2011-09-05 25 views
4

我想在我的Android應用程序中實現功能,這將允許用戶在我的應用程序中支持其國家/地區時收到通知,我對如何實現此功能存在一些疑問。以編程方式註冊的廣播接收機將在多長時間內實時播放?

使用情況是這樣的

用戶進入活動,在那裏他可以看到支持的國家名單。用戶的國家永遠是第一位的,如果不支持,他可以點擊一個按鈕,並要求在他的國家獲得支持時通知他。

一些想法

1.當上的一個按鈕,我會註冊網絡狀態用戶點擊經由registerReceiver()方法改變廣播接收器。在已註冊的接收器中,我會經常檢查用戶是否在使用WiFi,如果是,請從服務器下載一些字節以檢查用戶的國家是否受支持。當被支持時,我將取消註冊接收器。我對這個想法的懷疑是以編程方式註冊廣播接收器的時間有多長?也許接收器需要持續數月。如果用戶不卸載我的應用程序,接收器會一直接收事件?在Android清單

2.註冊廣播接收器,當被告知用戶請求把布爾在SharedPreferences shouldBeInformed和廣播接收器繼續之前總是檢查此值。

你有什麼想法如何優雅和有效地處理這個問題? C2DM不適合用於此momemnt。

謝謝。

回答

2

我想在我的Android應用程序中實現功能,這將允許用戶在我的應用程序支持其國家/地區時收到通知,並且我對如何實現此功能存在一些疑問。

通常,「在我的應用程序中支持」意味着該應用程序的更新。

用戶所在國家始終是第一位,如果不支持,則有一個按鈕,他可以點擊並請求在其國家獲得支持時通知他。

將國家保存在SharedPreferences。在每次更新應用程序後首次啓動時,查看該國是否在支持列表中,並彈出「嗨!它現在支持!」對話。或者,在一個緊急的情況下,註冊ACTION_PACKAGE_REPLACED,如果它是你的軟件包被替換,看看你是否支持該國家並在狀態欄中輸入一個Notification

當用戶點擊一個按鈕時,我會通過registerReceiver()方法註冊網絡狀態改變的廣播接收器。

爲什麼?

在註冊接收我總是檢查用戶是否已啓用WiFi,如果它是從服務器上下載一些字節來檢查,如果用戶所在的國家現在支持。

對此,您不需要BroadcastReceiver。每當您決定檢查更新時(例如,通過AlarmManager每天一次),您可以檢查設備是否在WiFi上。我不太清楚你爲什麼關心WiFi,我不知道這與更新應用程序有什麼關係(通常由Android Market處理)。

而且當被支持時,我將取消註冊接收器。

很久以前它將被取消註冊。

我的這種想法無疑是多長時間編程註冊的廣播接收器生活?也許接收器需要持續數月。

無論用戶在屏幕上有多長時間,它都會存活。您的活動暫停之前,您需要取消註冊接收者。即使您在活動被破壞後故意泄漏接收器 - 這是一個糟糕的主意 - 它會持續數分鐘,直到Android終止該過程。

在Android Manifest中註冊廣播接收器,並且當用戶請求被通知時,在SharedPreferences中放入boolean shouldBeInformed並在繼續廣播接收器之前總是檢查該值。

爲什麼?

+0

嗨@CommonsWare,在添加/刪除國家/地區支持時無需在Android市場上發佈新版本。我總是在應用程序啓動時下載最新的數據。當然,在某種程度上有本地的緩存機制,但這不是問題。 「支持國家」意味着用戶現在可以訪問與他的國家相關的一些新數據。 –

+0

@ a.ilic:「我總是在應用程序啓動時下載最新的數據。」 - 然後檢查下載數據時是否支持該國家。如果您想讓用戶知道何時可以更新數據,請使用'AlarmManager'和'IntentService'來每天檢查一次(或者您認爲合適的頻率)。 – CommonsWare

+0

我的想法是通知用戶,即使他沒有使用我的應用程序,但它已安裝在手機上。謝謝,我會檢查'AlarmManager'和'IntentService'。 –

相關問題