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をクリップボードへコピーするサンプルです。

//コピーする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が作成できているかどうかを判定する必要があります。

One Comment