2012-05-10 125 views
0

我使用的警報管理器調用在稍後的時間,我想更新在用戶指定的時間文件的服務。該機制工作正常。我現在需要做的是傳遞給警報所稱的服務,因爲我有多個不同意圖的警報,需要在不同的時間做不同的事情。傳遞信息從一個活動到服務

我明白如何通過額外使用包,但它似乎並沒有與服務工作。我無法通過這種方式傳遞任何信息,我一直收到null作爲從活動傳遞到服務的內容。

這裏是1個報警我的活動代碼。

Intent myIntent = new Intent(this, TimerService.class); 
Bundle bundle = new Bundle(); 
bundle.putString("extraData", "FIRST_ALARM"); 
myIntent.putExtras(bundle);  
PendingIntent AmPendingIntent = PendingIntent.getService(this, 0, myIntent, 0); 

AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE); 
am.setRepeating(AlarmManager.RTC_WAKEUP, Time2fire, fONCE_PER_DAY, AmPendingIntent); 

服務代碼:

super.onStart(intent, startId); 
String bundleFromActivity = intent.getStringExtra("extraData"); 

我搜索了很多,但沒有我見過任職。從我的服務 從我的活動

Intent intent = new Intent(getApplicationContext(), TimerService.class); 
intent.putExtra("someKey", "hifromalarmone");  
PendingIntent myIntent = PendingIntent.getService(getApplicationContext(),0,intent, 0); 

AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE); 
am.setRepeating(AlarmManager.RTC_WAKEUP, Time2fire, fONCE_PER_DAY, myIntent); 

我知道現在的OnStart被棄用,onstartcommand必須使用:

確定,所以現在我改成了這一點。

public int onStartCommand(Intent intent, int startId, int flags) 
{ 
super.onStartCommand(intent, flags, startId); 
Bundle extras = intent.getExtras(); 
String data1 = extras.getString("somekey");// intent.getStringExtra("someKey"); 
return START_STICKY; 
} 

並猜測什麼....仍返回一個空。我在這裏錯過了什麼?看起來我沒有通過正確的東西。

好吧,所以我想通了......經過很多挖掘和一點點好運,我意識到僅僅更新我的意圖內的數據是不夠的,因爲我的原始意圖已經在系統中註冊。因此,它從未更新過我傳遞的新數據。這裏是關鍵,(希望有人認爲這有用) 下面的代碼行就是需要更新 的PendingIntent AmPendingINtent = PendingIntent.getService(此,0,myIntent,0); 如果更新上次0,因爲這是在系統中註冊的最後一次別的東西它迫使意圖更新並沿着你的包通過。

的PendingIntent AmPendingINtent = PendingIntent.getService(此,0,myIntent,654654); //這樣的事情。

+0

是這個Java的Android?可能會從一些適當的標籤中受益。 – joshp

+0

正確。我爲這個謝謝添加了其他標籤! – FirmwareEngineer

+0

您可能想在這裏查看我的教程:http://blog.blundell-apps.com/notification-for-a-user-chosen-time/我發送了一個布爾額外的意圖 – Blundell

回答

0

在你的第一個場景

您使用putExtras

myIntent.putExtras(bundle);  

你應該使用putExtra

myIntent.putExtra(bundle);  

putExtras是用於其它目的,如跨應用程序的意圖或東西


在第二個方案中,您把鑰匙使用:

"someKey" 

你再嘗試使用檢索:

"somekey" 

他們是不一樣造成的空。


在一個無恥的插頭我有通知和服務在這裏是個非常好的architectured乾淨OO例如:http://blog.blundell-apps.com/notification-for-a-user-chosen-time/

+1

謝謝!我確實注意到了這一點,並將其更改爲somekey/somekey.Also發現在我的未決意圖中添加PendingIntent.FLAG_UPDATE_CURRENT也可以修復它。 – FirmwareEngineer

相關問題