Android剪貼簿的妙用
Clipboard還能玩出花
Clipboard是Android提供的一個系統服務,它提供了一個全域性的剪貼簿,讓文字、圖片、資料,在多App間共享成為可能,今天,我們來了解下它的真面目,以及被玩壞的新姿勢。
說實話,如果不是為了讓Clipboard玩出花,我真不想寫這一篇,因為——這文件寫的真是太TM詳細了。
Clipboard應用
我們先來看看一些App對Clipboard的應用,例如手機迅雷,如果你複製了一個連結,那麼開啟迅雷後,會自動檢測並提示下載:
再例如一些翻譯軟體,例如有道詞典、滬江小D,他們都有一個功能,即複製查詞,使用的也是這個原理,我這沒裝這些App,就不截圖了,再例如比較常用的手淘喵口令,實際上也是利用這個功能,當然,也有一些比較專業的Clipboard App,例如Clipboard Actions:
我們可以看見,實際上,他就是幫你解析了各種可能的剪貼簿,並對他們提供了各種後續功能的集合,確實非常實用,不過,看完今天的文章,相信你要寫一個這樣的App,估計也就分分鐘。
OK,這些就是一些Clipboard的基本使用場景,更多場景,沒有做不到,只有想不到。
基本使用
Clipboard的基本使用,就是三部曲。
獲得ClipboardManager:
Java12 | ClipboardManager mClipboardManager=mClipboardManager=(ClipboardManager)getSystemService |
Copy:
Java1 2 3 4 |
ClipData
mClipData;
<span
class="hljs-built_in">String</span>text=<span
class="hljs-string">"hello
world"</span>;
mClipData=ClipData.newPlainText(<span
class="hljs-string">"test"</span> |
Paste:
Java123 | ClipData clipData=mClipboardManager.getPrimaryClip();ClipData.Item item=clipData.getItemAt(<span class="hljs-number">0</span>);<span class="hljs-built_in">String</span>text=item.getText().toString(); |
結束了,簡直不能再簡單,API文件也寫的非常詳細,Demo都寫了好幾個。
不止於文字
我們可以建立以下三種類型的ClipData:
型別 | 描述 |
---|---|
Text newPlainText(label, text) | 返回ClipData物件,其中ClipData.Item物件包含一個String |
URI newUri(resolver, label, URI) | 返回ClipData物件,其中ClipData.Item物件包含一個URI |
Intent newIntent(label, intent) | 返回ClipData物件,其中ClipData.Item物件包含一個Intent |
對應的,我們也能獲取到不同型別的ClipData。
ClipboardManager管理
ClipboardManager中有很多判斷與操作方法:
型別 | 描述 |
---|---|
getPrimaryClip() | 返回剪貼簿上的當前Copy內容 |
getPrimaryClipDescription() | 返回剪貼簿上的當前Copy的說明 |
hasPrimaryClip() | 如果當前剪貼簿上存在Copy返回True |
setPrimaryClip(ClipData clip) | 設定剪貼簿上的當前Copy |
setText(CharSequence text) | 設定文字到當前Copy |
getText() | 獲取剪貼簿複製的文字 |
玩出一朵小FaFa
在瞭解了上面這些內容後,我們就可以做一些比較有意思的東西了,例如,我們可以通過監控使用者剪貼簿中的內容,來做一些自動的推斷,例如,使用者複製了一個英文單詞,那麼我們可以推斷,使用者可能要進行翻譯,再例如,使用者複製了一個連結,那麼我們也可以推斷,使用者可能需要開啟這個連結,等等。
Google在文件中,直接給出了示例的程式碼: