在android中将对象从一个应用程序传递到另一个应用程序

时间:2013-02-01 09:10:49

标签: android serialization ipc parcelable aidl

经过多次googeling之后,我找不到任何方法将对象从一个应用程序传递给其他应用程序。虽然我知道我们可以使用Parcel将对象从一个活动传递到其他活动但是如何在应用程序之间执行此操作? 我的目标是这个

public class MyObject
{
    private String name;
    public String getName()
    {
        return this.name;
    }
    public void setName(String name)
    {
        this.name=name;
    }
}

那么如何做到就像我们在活动之间传递对象一样

intent.putExtra("key",new MyOject());

6 个答案:

答案 0 :(得分:3)

我假设你负责这两个应用程序。

以下哪种情况属实?

  • 两个应用程序都依赖于单个数据存储
  • 应用程序相当独立,但用户可能希望将一些数据从一个数据共享到另一个

如果第一种情况属实,通常的方法是创建Android内容提供程序(如前所述)或使用AIDL语言公开API的服务。这两个应用程序将依赖于内容提供商或服务。

有关AIDL和服务的信息,请参阅此处: http://developer.android.com/reference/android/app/Service.html http://developer.android.com/guide/components/aidl.html

如果应用程序是对等的,那么关于Intents的现有答案是好的。一个应用程序只能使用startActivity触发另一个应用程序,或者您可能希望为用户提供一种选择从一个到另一个共享对象的方法。看这个: http://developer.android.com/training/sharing/send.html

答案 1 :(得分:1)

一个建议可能是使用ContentProviders

参考:

  

内容提供商是Android应用程序的主要构建块之一,为应用程序提供内容。它们封装数据并通过单个ContentResolver接口将其提供给应用程序。

另一个建议可能是使用SharedPreferences,getSharedPreferences使用正确的mode。但正如您在参考文献中所看到的,自API级别17以来,某些模式已被弃用。

希望这有帮助,如果不在下面发表评论

答案 2 :(得分:1)

还有另一种在全局库中使用这些对象和方法的最佳方法,并将该库添加到您的android项目中。您可以在该库中声明自己的类,而其他功能是jar文件,您可以将taht类放入jar文件,你可以重新使用它.... 此链接可能对您有用.............. How to create your own library for Android development to be used in every program you write?

答案 3 :(得分:0)

如果您必须共享相对非常小的数据,请使用Shared Preferences,这很容易实现。

public static void addData(Context context, String data) {
    SharedPreferences sharedPref = context.getSharedPreferences(app_name, 0);
    SharedPreferences.Editor editor = sharedPref.edit();
    editor.putString("Name", data);
    editor.commit();
    }

public static String getData(Context context) {
    SharedPreferences sharedPref = context.getSharedPreferences(app_name, 0);
    String fontSize = sharedPref.getString("Name", "default");
    return fontSize;
    }

或者,如果您有相当大的数据,也可以使用Content Provider

答案 4 :(得分:-1)

不幸的是,如果应用程序不是Parcelable,则无法在应用程序之间共享对象。

但是你可以借助服务和AIDL来做到这一点:http://developer.android.com/guide/components/aidl.html

答案 5 :(得分:-2)

传递对象黑白活动:

public class MyObject  implements Parcelable{

    private String name;
    public String getName()
    {
    return this.name;
    }
    public void setName(String name)
    {
     this.name=name;
    }

    public MyObject() {

    }

    // Parcelling part
    public MyObject(Parcel in){
        this.name = in.readString();
    }


    @Override
    public int describeContents() {
        return 0;
    }


    @Override
    public void writeToParcel(Parcel dest, int arg1) {
        dest.writeString(this.name);
    }



    public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
        public MyObject createFromParcel(Parcel in) {
            return new MyObject(in); 
        }

        public MyObject[] newArray(int size) {
            return new MyObject[size];
        }
    };
}


//set Intent
Intent i= new Intent();
MyObject  o;
i.putExtra("obj", o);



//getIntent
Bundle data = getIntent().getExtras();
MyObject obj = data.getParcelable("obj");