在不同app间通过Intent传递对象

Android 码拜 6年前 (2015-05-10) 317次浏览 0个评论

想通过Intent在不同app间传递自定义对象;
自定义类实现Parcelable接口,代码如下:

public class ObjPar implements Parcelable{

	private String mName;
	private String mAddr;
	private int mId;
//	private IBinder mBinder;

	public ObjPar(){
		super();
	}
	public ObjPar(Parcel par){
		mName = par.readString();
		mAddr = par.readString();
		mId = par.readInt();
	}

	@Override
	public int describeContents() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public void writeToParcel(Parcel dest, int flags) {
		// TODO Auto-generated method stub
		dest.writeString(mName);
		dest.writeString(mAddr);
		dest.writeInt(mId);
	}

	public static final Parcelable.Creator<ObjPar> CREATOR = new Creator<ObjPar>(){

		@Override
		public ObjPar createFromParcel(Parcel source) {
			// TODO Auto-generated method stub
			return new ObjPar(source);
		}

		@Override
		public ObjPar[] newArray(int size) {
			// TODO Auto-generated method stub
			return new ObjPar[size];
		}

	};

	public String getName(){
		return mName;
	}

	public void setName(String name){
		mName = name;
	}

	public String getAddr(){
		return mAddr;
	}

	public void setAddr(String addr){
		mAddr = addr;
	}

	public int getId(){
		return mId;
	}

	public void setId(int id){
		mId = id;
	}

}

用Intent传递这个对象到另一个app
发送端:

		Intent intent = new Intent();
		intent.setClassName("yu.obj", "yu.obj.Main");
		Bundle bundle = new Bundle();
		bundle.putParcelable("parcel", parcel);
		intent.putExtras(bundle);
		startActivity(intent);

接收端:

                Intent intent = getIntent();
		Bundle bundle = intent.getExtras();
		if(null != bundle){
			ObjPar par = bundle.getParcelable("parcel");
		}

当执行到
ObjPar par = bundle.getParcelable(“parcel”);
这句时将会报错:
 java.lang.RuntimeException: Unable to start activity ComponentInfo{yu.obj/yu.obj.Main}: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: cm.transobj.ObjPar

在发送端加上:

intent.setExtrasClassLoader(ObjPar.class.getClassLoader());

问题依旧存在
把上面那句加到接收端也行,没辙了;
难道不同app间不能通过Intent传递自定义对象吗?
这个问题如何解决呢;
知道的清帮忙解答下,非常感谢;

40分
不同的APP属于不同的进程, 此时需要使用进程通信。可以使用AIDL这个东西来解决。
引用 1 楼 li352558693 的回复:

不同的APP属于不同的进程, 此时需要使用进程通信。可以使用AIDL这个东西来解决。

是不是可以这样理解,parcelable不能在不同进程间传递自定义类对象;
不知道这条的出处在哪里?

引用 2 楼 zmscs 的回复:
Quote: 引用 1 楼 li352558693 的回复:

不同的APP属于不同的进程, 此时需要使用进程通信。可以使用AIDL这个东西来解决。

是不是可以这样理解,parcelable不能在不同进程间传递自定义类对象;
不知道这条的出处在哪里?

基本类型。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明在不同app间通过Intent传递对象
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!