如何在启动时将Intent传递给服务(但有时只是)

时间:2011-04-14 17:30:11

标签: android service android-intent

所以,我正在研究一个学校项目的Android应用程序,并且在开发结束时遇到了一个奇怪的错误。应用程序的一部分是在后台运行并且每隔一段时间就检查一次服务器的服务,但是需要选择是在后台运行服务还是使用手动签入。为了避免重复代码,我试图做的是将Intent传递给服务,当它以“强制更新一次,然后停止”为线的布尔值开始时。但是,我的服务似乎没有获得这个价值。

启动服务的代码:

Intent intent = new Intent(this, EmpCheckinService.class);
intent.putExtra("singleCheckInOnly", true);
intent.putExtra("locationString", location);

startService(intent);

Service类中的代码:

// This is the old onStart method that will be called on the pre-2.0
// platform.  On 2.0 or later we override onStartCommand() so this
// method will not be called.
@Override
public void onStart(Intent intent, int startId) {
    examineIntent(intent);
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    examineIntent(intent);
    // We want this service to continue running until it is explicitly
    // stopped, so return sticky.
    return START_STICKY;
}

private void examineIntent(Intent intent) {
    try {
        singleCheckInOnly = intent.getExtras().getBoolean("singleCheckInOnly", false);
        locationString = intent.getExtras().getString("locationString");
    } catch (Exception e) {
        // Don't need to do anything here, just prevent from crashing if the keys aren't found
    }
}

正如您所看到的,我已经在onStart和onStartCommand上使用它以允许它在1.5或2.1+设备上工作,但它从不会遇到这些功能。谁能指出我在这方面的正确方向?

编辑:我想我发现了这个问题。在onStartCommand之前调用onCreate吗?

2 个答案:

答案 0 :(得分:1)

  

在onStartCommand之前调用onCreate吗?

如果您:

,这将更加简单,用户友好

步骤1:创建IntentService而不是Service

步骤2:使用AlarmManager向服务发送Intents以定期检查服务器

然后,从服务的角度来看,基于计时器的检查和用户启动的检查之间没有区别。

答案 1 :(得分:0)

如果你有超过1个额外的东西,那么你最好使用bundle

Tos发送额外内容 -

 Intent i = new Intent(sender.this,receiver.class);
           Bundle extras = new Bundle();
    extras.putString("key1",element);
    extras.putString("key1",element);
    extras.putString("key2",element2);
    extras.putString("key3",element3);
    extras.putString("key4",element4);
  ......so on
        i.putExtras(extras);

接受使用 -

   Bundle extras2 = getIntent().getExtras();

            if (extras != null){
            final String str = extras2.getString("key1");
final String str = extras2.getString("key2");
final String str = extras2.getString("key3");
final String str = extras2.getString("key4");
final String str = extras2.getString("key5");
......so  on