ClipboardManagerでIntentをコピーする
|ClipboardManagerを使用してテキストのコピーと貼り付けを行う(Android3.0版)ではテキストのコピーを紹介しましたが、今回はIntentをクリップボードへコピーする方法を紹介します。
Intentのコピーはユーザーの行動履歴などを保存しておきたい場合に便利です。
Intentのコピーの動きを大まかに把握して頂くために、Spinnerから起動したいIntentを指定して、ボタン押下でコピーしたIntentを起動するサンプルを作成しています(サンプルはこちらからSVNなどでダウンロードして下さい。)
詳細は以下から。
Intentのコピー
Intentのコピーはテキストのコピーと同様にClipDataオブジェクトを作成して行います。(ClipDataの詳細はこちら)
Intent保存用のClipDataオブジェクトの生成はClipDataクラスのnewIntent (CharSequence label, Intent intent)メソッドを使用します。
以下はカメラのIntentをクリップボードへコピーするサンプルです。
1 2 3 4 5 6 7 8 | //コピーする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を起動するサンプルです。
1 2 3 4 5 6 7 8 9 10 11 | //システムのクリップボードオブジェクトを取得 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が作成できているかどうかを判定する必要があります。
One Comment