如何在启动服务时从活动中传递数据到服务?

3

我正在创建一个android应用程序。

如何在启动服务时传递ArrayList对象并在服务中访问它?

谢谢提前...


你可以使用intent.putExtra()方法将其放置,然后在服务中,你可以使用getParcelableArray方法在服务的onStart()方法中获取数组。 - Krutik
5个回答

2

您需要在服务中覆盖onStart方法。在onStart方法中,您可以获取Activity的意图。如果您想从Activity传递ArrayList到服务,则可以将您的ArrayList转换为数组。

在您的Activity中:

Intent intent=new Intent(ServicesActivity.this,FileManagerRequest.class);         
Bundle b=new Bundle()
b.putStringArray("Array", your_array)
intent.putExtras(b);
startService(intent);

在您的服务中
public void onStart(Intent intent, int startid){
    super.onStart(intent, startid);
    Bundle b=intent.getExtras();
    String[] Array = b.getStringArray("Array");
}

1

两个选项:

  1. 如果服务是本地的,那么您可以绑定到它并直接调用方法
  2. 如果服务是远程的,则可以使用Bundle传递一些数据。

1

最终我得到了答案,对我有用,试一下吧。

1)当从Activity发送对象(如ArrayList<String> names)时,请按照以下示例发送:names.add("kdblue");

Intent startIntent = new Intent(CuurentActivity.this, UploadService.class);
startIntent.putStringArrayListExtra("data",names);
startService(startIntent);

2) 现在从服务接收到这个 ArrayList<String> 对象

@Override
    public int onStartCommand(Intent intent, int flags, int startId) {
       ArrayList<String> transferData = intent.getStringArrayListExtra("data");
      return START_STICKY;
    }

注意:`transferData` 对象包含所有 `ArrayList<String> names` 属性。

-1

/**在你的活动中***/

startbtn.setOnClickListener(new View.OnClickListener() {

        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            Bundle b=new Bundle();
            b.putString("id", id);
            Intent in=new Intent(create.this,myservice.class);

            in.putExtras(b);
            //Toast.makeText(getBaseContext(), "Service Started", Toast.LENGTH_LONG).show();
            startService(in);
}

-1

/**为您服务****/

public int onStartCommand(Intent intent, int flags, int startId) {
// We want this service to continue running until it is explicitly
// stopped, so return sticky.
       super.onStart(intent, startId);
     id=intent.getExtras();
     value=id.getString("id");

Toast.makeText(this, "Service Started "+value, Toast.LENGTH_LONG).show();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接