phicdy devlog

Androidアプリ開発やその他技術系の記事をたまに書きます

AndroidとかiOSとかモバイル多め。その他技術的なことも書いていきます。

【Android】 クリップボードへのコピー

Androidクリップボードにテキストを追加してコピーできるようにするにはClipboardManagerを使う。

ClipboardManagerはAPI 11(~3.0)までで使われていたものとAPI11から推奨となったもので2つある。

// API 10(2.3.*)まで
import android.text.ClipboardManager

ClipboardManager clipboardManager = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE);
clipboardManager.setText("text");

// API 11(3.0)から
import android.content.ClipboardManager

ClipboardManager clipboardManager = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE);
clipboardManager.setPrimaryClip(ClipData.newPlainText("label", "text"));

API 11からは単にsetText()を呼ぶのではなくClipDataを使用して複雑なデータも扱えるようになった。

ちなみにAP11から推奨となっている方のClipboardManagerををAndroid2.3以下で動かすと下のようなエラーが出てクラッシュする。

E/AndroidRuntime(3072): FATAL EXCEPTION: main
E/AndroidRuntime(3072): java.lang.NoClassDefFoundError: android.content.ClipboardManager
E/AndroidRuntime(3072): 	at xxx.xxx.xxx(xxx.java:yyy)
E/AndroidRuntime(3072): 	at android.view.View.performClick(View.java:2552)
E/AndroidRuntime(3072): 	at android.view.View$PerformClick.run(View.java:9229)
E/AndroidRuntime(3072): 	at android.os.Handler.handleCallback(Handler.java:587)
E/AndroidRuntime(3072): 	at android.os.Handler.dispatchMessage(Handler.java:92)
E/AndroidRuntime(3072): 	at android.os.Looper.loop(Looper.java:138)
E/AndroidRuntime(3072): 	at android.app.ActivityThread.main(ActivityThread.java:3701)
E/AndroidRuntime(3072): 	at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(3072): 	at java.lang.reflect.Method.invoke(Method.java:507)
E/AndroidRuntime(3072): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878)
E/AndroidRuntime(3072): 	at com.android.internal.os.ZygoteInit.fmain(ZygoteInit.java:636)
E/AndroidRuntime(3072): 	at dalvik.system.NativeStart.main(Native Method)