2013-02-01 41 views
3

經過大量的googeling之後,我找不到任何方法將對象從一個應用程序傳遞到其他應用程序。儘管我知道我們可以將對象從一個活動傳遞到其他活動包裹,但如何在應用程序之間做到這一點? 我的目標是這個將對象從一個應用程序傳遞到另一個應用程序android

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

話,怎麼可能使用ContentProviders

從參考

要做到這一點,像我們一樣傳遞

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

+0

Sry刪除了我的回答,我沒有讀取全部你的問題。 – AMerle

+1

http://stackoverflow.com/a/12407484/646806這個? – RobinHood

回答

3

我假設你負責這兩個應用程序的很。

以下哪種情況屬實?

  • 這兩種應用都依賴於一個單一的數據存儲
  • 的應用是相當獨立的,但是用戶可能想從一個共享一些數據到其他

如果第一種情況是真實的,通常的方法是創建一個Android Content Provider(如前所述)或一個服務,它使用AIDL語言公開一個API。這兩個應用程序將取決於內容提供者或服務。

在這裏看到關於AIDL和服務的信息: http://developer.android.com/reference/android/app/Service.html http://developer.android.com/guide/components/aidl.html

但是,如果應用程序是對等的,那麼關於意圖現有的回答都不錯。任何一個應用程序都可以簡單地使用startActivity來觸發另一個應用程序,或者您可能希望爲用戶提供一種選擇將對象從一個分享到另一個的方法。看看這個: http://developer.android.com/training/sharing/send.html

+0

http://developer.android.com/training/sharing/send.html,通過使用這個解決方案,我們可以只共享那些已知的應用程序(例如URI包裹)的對象(類),但問題是發送一個應用程序已知的對象,但不包含其他的對象 –

+0

如果對象未知,您要將對象映射到哪個對象? – Tobrun

+1

你能告訴我們更多關於確切的用例嗎?我看不出在邏輯上如何從一個應用程序發送一些數據到另一個應用程序,除非第二個應用程序也理解數據。 –

1

一個建議活動之間的對象:

內容提供商是Android應用程序的主要構建模塊之一,爲應用程序提供內容。它們封裝數據並通過單個ContentResolver接口將其提供給應用程序。

另一個建議可能是使用SharedPreferences,而getSharedPreferences使用正確mode。但你可以在參考看到一些模式,因爲API級別棄用17

希望這會有所幫助,如果不低於

+0

這可能是一個解決方案。但我認爲應該有其他選項來分享對象。 –

-2

傳遞對象b/w的活動:

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"); 
+0

從問題引用:儘管我知道我們可以將對象從一個活動傳遞給其他使用Parcel .. – Tobrun

+0

您是否認爲,這是我的問題? –

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

+0

SharedPreference的用法與您建議的一樣,已在API級別17中棄用。 – Tobrun

+0

我在Developer's Documentation中看不到它。你能否提供我的來源? – gauravsapiens

+0

http://developer.android.com/reference/android/content/Context.html#MODE_PRIVATE – Tobrun

相關問題