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(this,0,myIntent,0); 如果您将最后一个 0 更新为自上次向系统注册以来的其他内容,它会强制意图更新并传递您的捆绑包。

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

4

1 回答 1

0

在您的第一个场景中

您使用putExtras

 myIntent.putExtras(bundle);    

你应该使用putExtra

myIntent.putExtra(bundle);    

putExtras 用于其他目的,例如跨应用意图或其他用途


在你的第二种情况下,你把钥匙放在使用中:

 "someKey"

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

 "somekey"

它们不一样导致你的空值。


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

于 2012-05-11T16:48:57.727 回答