ClipboardManagerを使用してテキストのコピーと貼り付けを行う(Android3.0版)ではテキストのコピーを紹介しましたが、今回はIntentをクリップボードへコピーする方法を紹介します。
Intentのコピーはユーザーの行動履歴などを保存しておきたい場合に便利です。
Intentのコピーの動きを大まかに把握して頂くために、Spinnerから起動したいIntentを指定して、ボタン押下でコピーしたIntentを起動するサンプルを作成しています(サンプルはこちらからSVNなどでダウンロードして下さい。)
詳細は以下から。
Intentのコピー
Intentのコピーはテキストのコピーと同様にClipDataオブジェクトを作成して行います。(ClipDataの詳細はこちら)
Intent保存用のClipDataオブジェクトの生成はClipDataクラスのnewIntent (CharSequence label, Intent intent)メソッドを使用します。
以下はカメラのIntentをクリップボードへコピーするサンプルです。
//コピーするIntentを作成 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //システムのクリップボードオブジェクトを取得 ClipboardManager cm = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); //Intentのクリップデータを作成 ClipData cd = ClipData.newIntent("Intent", intent); //Intentをクリップボードへコピー cm.setPrimaryClip(cd);
クリップボードからIntentを取り出す
コピーしたIntentをクリップボードから取得するにはClipData.ItemクラスのgetIntentメソッドを使用します。
以下はクリップボードからIntentを取得して、取得したIntentからActivityを起動するサンプルです。
//システムのクリップボードオブジェクトを取得 ClipboardManager cm = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); //クリップボードからコピーされているIntentを取得 Intent intent = cm.getPrimaryClip().getItemAt(0).getIntent(); //Intentの取得正否確認 if(intent != null){ //Intentを起動 startActivity(intent); }else{ Toast.makeText(getApplicationContext(), "Intentを選択してください", Toast.LENGTH_SHORT); }
クリップボードは何が格納されているかわからないので、6行目のようにIntentが作成できているかどうかを判定する必要があります。