Java 将信息从活动传递到服务

Java 将信息从活动传递到服务,java,android,android-service,android-activity,Java,Android,Android Service,Android Activity,我正在使用alarm manager稍后调用服务,以便在用户指定的时间更新文件。这种机制运作良好。我现在需要做的是传递给alarm调用的服务,因为我有多个不同意图的alarm,需要在不同的时间做不同的事情 我知道如何通过捆绑包传递附加服务,但它似乎不适用于服务。我无法通过这种方式向它传递任何信息,我不断得到null作为从活动传递到服务的内容 这是我的1号警报的活动代码 Intent myIntent = new Intent(this, TimerService.class); Bundle b

我正在使用alarm manager稍后调用服务,以便在用户指定的时间更新文件。这种机制运作良好。我现在需要做的是传递给alarm调用的服务,因为我有多个不同意图的alarm,需要在不同的时间做不同的事情

我知道如何通过捆绑包传递附加服务,但它似乎不适用于服务。我无法通过这种方式向它传递任何信息,我不断得到
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; 
} 
猜猜看。。。。仍然返回空值。我在这里错过了什么???看起来我没有通过正确的东西

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

pendingent-ampendingentent=pendingent.getService(this,0,myIntent,654654);//类似这样的情况。

在您的第一个场景中

您的使用:

你应使用:

putExtras还有其他用途,比如跨应用程序意图之类的


在您的第二个场景中,您使用以下方法输入密钥:

 "someKey"
然后,您可以尝试使用以下方法检索它:

 "somekey"
它们不一样导致你的空值



在一个无耻的插件中,我有一个非常好的架构和干净的通知和服务OO示例:

这是Android的Java吗?可能受益于一些适当的标记。正确。我为此添加了一些其他标签,谢谢!您可能想在这里查看我的教程:我发送了一个布尔额外的意图谢谢!我确实注意到了这一点,并将其更改为somekey/somekey。我还发现,在我挂起的意图中添加pendingent.FLAG_UPDATE_CURRENT也可以修复它。
 "someKey"
 "somekey"