我正在使用警报管理器稍后调用服务,我想在用户指定的时间更新文件。该机制运行良好。我现在需要做的是传递给警报调用它的服务,因为我有多个具有不同意图的警报,它们需要在不同的时间做不同的事情。
我了解如何通过捆绑传递额外内容,但它似乎不适用于服务。我不能以这种方式将任何东西传递给它,我不断得到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);// 类似这样。