将信息从活动传递到服务

时间:2012-05-10 02:32:08

标签: java android android-service android-activity

我正在使用警报管理器稍后调用服务,我想在用户指定的时间更新文件。这种机制很好。我现在需要做的是传递到警报调用它的服务,因为我有多个不同意图的警报,需要在不同的时间做不同的事情。

我理解如何使用bundle传递额外内容,但它似乎不适用于服务。我不能以这种方式传递任何东西,我不断得到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已被弃用,必须使用onstart命令。

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

并猜测....仍然返回null。我在这里失踪了什么?看起来我没有传递正确的东西。

好吧,所以我想通了......经过大量的挖掘和一点好运后,我意识到仅仅更新我意图中的数据是不够的,因为我的原始意图已经在系统中注册了。因此,它从未使用我新传递的数据进行更新。这是关键,(希望有人觉得这很有用) 以下代码行是需要更新的内容 PendingIntent AmPendingINtent = PendingIntent.getService(this,0,myIntent,0); 如果自上次向系统注册以来将最后的0更新为其他内容,则会强制更新意图并传递捆绑包。

PendingIntent AmPendingINtent = PendingIntent.getService(this,0,myIntent,654654); //像这样。

1 个答案:

答案 0 :(得分:0)

在你的第一个场景中

您使用putExtras

 myIntent.putExtras(bundle);    

你应该使用putExtra

myIntent.putExtra(bundle);    

putExtras用于其他目的,例如跨应用程序意图或其他东西


在第二个场景中,您将密钥用于:

 "someKey"

然后尝试使用以下方法检索它:

 "somekey"

它们与您的null不同。


在一个无耻的插件中,我有一个非常好的架构和干净的OO示例通知和服务:http://blog.blundell-apps.com/notification-for-a-user-chosen-time/