Sending an object to a service through Intent without binding

后端 未结 3 1296
悲哀的现实
悲哀的现实 2021-02-13 05:07

Is is possible to send an object to an Android Service through an Intent without actually binding to the service? Or maybe another way for the Service to access Objects...

相关标签:
3条回答
  • 2021-02-13 05:58

    If you don't want to implement Parcelable and your object is serializable

    use this

    In the sender Activiy

    Intent intent = new Intent(activity, MyActivity.class);
    
    Bundle bundle = new Bundle();
    bundle.putSerializable("my object", myObject);
    
    intent.putExtras(bundle);
    
    startActivity(intent);
    

    In the receiver:

    myObject = (MyObject) getIntent().getExtras().getSerializable("my object");
    

    Works fine for me try it. But the object must be serializable :)

    0 讨论(0)
  • 2021-02-13 06:04

    Like Bino said, you need to have your custom object implement the Parcelable interface if you want to pass it to a service via an intent. This will make the object "serializable" in an Android IPC-wise sense so that you can pass them to an Intent's object putExtra(String, Parcelable) call.

    For simple primitive types, there's already a bunch of setExtra(String, primitive type) methods. As I understand you, however, this is not an option for you which is why you should go for a Parcel.

    0 讨论(0)
  • 2021-02-13 06:09

    You can call startService(Intent) like this:

    MyObject obj = new MyObject();
    Intent intent = new Intent(this, MyService.class);
    intent.putExtra("object", obj);
    startService(intent);
    

    The object you want to send must implement Parcelable (you can refer to this Percelable guide)

    class MyObject extends Object implements Parcelable {
    
        @Override
        public int describeContents() {
            // TODO Auto-generated method stub
            return 0;
        }
    
        @Override
        public void writeToParcel(Parcel dest, int flags) {
            // TODO Auto-generated method stub
    
        }
    
    }
    

    And with the Service, in the method onStart() or onStartCommand() for api level 5 and newer, you can get the object:

    MyObject obj = intent.getParcelableExtra("object");
    

    That's all :)

    0 讨论(0)
提交回复
热议问题