2013-03-28 20 views
1

我目前工作的一個動態壁紙,其需要跟蹤的未讀短信數量的。 當短信收到我更新這樣的SMSCOUNT:如何將應用程序上下文傳遞到廣播接收器,同時保持構造空

@Override 
public void onReceive(Context context, Intent intent) { 
    final Uri SMS_INBOX = Uri.parse("content://sms/inbox"); 

    Cursor c = context.getContentResolver().query(SMS_INBOX, 
                null, 
                "read = 0", 
                null, 
                null); 
    mSMSCount = c.getCount(); 
    c.close(); 
} 

其正常工作。但是,該值僅在接收到消息之前更新,因爲它會給出錯誤的值(SMSCounts初始化值)。所以要初始化SMSCount爲正確的值,我將不得不用上面的代碼初始化它。問題在於它需要一個上下文。當我嘗試將應用程序上下文傳遞給Broadcast接收者的構造函數時,我得到一個「無空的構造函數」異常。

+1

爲什麼在構造函數上傳遞上下文,如果您在onReceive方法上接收到上下文? –

+0

因爲我需要使用相同的代碼來初始化mSMSCount,該代碼需要onReceive方法之外的上下文。 – CalvinWylie

回答

2

只要繼續下去,並添加一個空的構造上您的課,以及你目前正通過上下文到構造函數,所以換句話說,添加一個構造函數沒有參數。第一

+0

我試過這個,但我得到一個奇怪的錯誤。看來onReceive正在改變一個單獨的mSMSCount變量,而不是已經建立的變量。我得出這樣的結論,因爲: 我onRecieve IVE的末尾添加一個Log.d爲mSMSCount這確實上去了,每次一個txt被接收。但是,我的getSMSCount()函數返回SMSReceiver類啓動時初始化的mSMSCount值。 – CalvinWylie

+0

接受這個答案,因爲它解決了您提出的問題,並繼續提出所有細節問題,我會盡我所能提供幫助。 – rennoDeniro

0

確定,第一件事,廣播接收器用來接收通知和警報的人,而不是留在運行,所以如果你有代碼之外的onReceive你做錯了。

從你的問題你做更多的事情需要在你的廣播接收器的構造的上下文。

我的消息是將所有這些代碼從onReceive移動到IntentService,這個服務將啓動,在數據庫上執行查找並調用更新計數,沒有實例變量,因爲服務將在事後結束。

然後開始你的程序,當你調用這個IntentService以顯示未讀郵件數,並在廣播接收器,你只能調用IntentService。

0

您可以添加參數化構造函數以及默認構造函數。

相關問題