本文譯自:http://developer.android.com/guide/topics/text/copy-paste.html
Android為複製和粘貼提供了強大的基於剪貼簿的架構。它支援簡單和複雜的資料類型,包括文本字串、複雜的資料結構、文本和二進位流資料、甚至應用成程式的資產。簡單的文本資料被儲存在剪貼簿中,而複雜的資料會儲存一個引用,粘貼應用程式會使用內容提供器來解析這個引用。複製和粘貼工作可以在應用程式內部進行,也可以在實現了該架構的兩個應用程式之間進行。
因為該架構部分使用了內容提供器,所以本專題會假設大家已經熟悉了Android Content Provider API,這個API在Content
Providers專題中被介紹。
剪貼簿架構
在使用剪貼簿架構時,你把資料放入一個clip對象,然後把這個clip對象放到系統剪貼簿。Clip對象可以是以下三種格式之一:
Text:一個文本字串,你直接把這個字串放入clip對象,然後把它放到系統剪貼簿上。從剪貼簿上擷取這個clip對象,就可以把字串複製到你的應用程式儲存空間中。
URI:代表人和URI格式的Uri對象。它主要用於從內容提供器中複製複雜的資料。把Uri對象放入一個clip對象,然後把這個clip對象放到系統的剪貼簿上來複製資料。從系統剪貼簿上擷取clip對象,然後擷取其中的Uri對象,解析其中的資料來源(如內容提供器)並從資料來源把資料複製到你的應用程式的儲存空間中。
Intent:它支援複製應用程式的捷徑。要複製這種資料,你就要建立一個Intent對象,把它放到一個clip對象中,並這個clip對象放到系統剪貼簿上。要粘貼資料,你就要從剪貼簿上擷取這個clip對象,然後把這個Intent對象放到你的應用程式的記憶體中。
系統剪貼簿每次只會持有一個clip對象。當一個應用程式把一個clip對象放到剪貼簿上時,前一個clip對象就會被廢棄。
如果你希望允許使用者把資料粘貼到你的應用程式中,你不必處理所有的資料類型。你可以在粘貼之前檢查剪貼簿上的資料,clip對象包含了告訴你MIME類型或可用類型的中繼資料。這個中繼資料會協助你判斷你的應用程式是否可以使用剪貼簿上的資料。例如,如果你有主要想要處理文本,那麼你可以忽略包含URI或Intent對象的clip對象。
你可能還想要讓使用者粘貼文本而不管剪貼簿上的資料的格式。你可以強制把剪貼簿資料轉換成文本形式,然後粘貼這個文本。