将字符串从活动传递到服务?

时间:2011-08-20 07:46:43

标签: android arrays service android-activity

我熟悉使用putExtra和getExtra方法将数组从一个活动传递到另一个活动的方法。但是,每当我尝试从服务中获取它时,以下代码都不起作用:

Bundle b = this.getIntent().getExtras();
String Array = b.getStringArray("paths");

没有认识到以下内容:

this.getIntent().getExtras();

有什么想法吗?

修改

活动类中的

我有以下内容:

    toService = new Intent();
    toService.setClass(this, Service.class);
    toService.putExtra("paths",Array);

在服务类中:

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    // TODO Auto-generated method stub
    Bundle extras = intent.getExtras();
    if(extras!=null)
    {
        Paths = extras.getStringArray("paths");
        Toast.makeText(protectionService.this, Paths[0], Toast.LENGTH_SHORT).show();
    }

    return 0;
}

由于没有明确分配路径,因此没有出现任何内容。

Paths = extras.getStringArray("paths");

似乎不起作用。

1 个答案:

答案 0 :(得分:1)

您在哪里尝试访问getIntent?

以下是我编写的程序的片段,它使用了getExtras:

@Override
public void onStart(Intent intent, int startId) {
    super.onStart(intent, startId);
    Bundle extras = intent.getExtras();
    if (extras != null) {
        // Do what you want 
      }
}

但是,onStart现已弃用,因此您应该使用onStartCommand。 您将意图作为参数之一。

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

否则您可以使用AIDL,偏好设置或此处回答的任何其他示例:How to access a variable present in a service

同样的问题已经回答Android: how to get the intent received by a service?

编辑: 如果你使用这个

toService = new Intent();
toService.setClass(this, Service.class);
toService.putExtra("array",Array);

你需要使用相同的密钥来获取附加功能,这里的密钥是“array”

Paths = extras.getStringArray("array");