今回は「表示しているテキストをコピペしたいな」と、そんなお話です。具体的には、表示している情報をメモ帳に貼り付けたりメールで送る方法をここではご紹介します。下記処理はクリップボードにコピーする処理となります。
//クリップボードに格納するItemを作成 ClipData.Item item = new ClipData.Item(Text); //MIMETYPEの作成 String[] mimeType = new String[1]; mimeType[0] = ClipDescription.MIMETYPE_TEXT_URILIST; //クリップボードに格納するClipDataオブジェクトの作成 ClipData cd = new ClipData(new ClipDescription("text_data", mimeType), item); //クリップボードにデータを格納 ClipboardManager cm = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); cm.setPrimaryClip(cd);
上記コードを使用して馬の順位をコピペするアプリを作成してみました。参考になれば幸いです。
1.ボタンクリックイベント
押されたボタンが「順位をコピー」ボタンであればクリップボードにコピーする処理を行っていきます。ここではクリップボードにコピーする関数と共有メニューを開く関数を呼んでいます。また、他にもボタンを追加できるようswitch文で作成しています。
// ボタンクリックイベント public void buttonOnClick(View v) { switch(v.getId()) { case R.id.allMemoButton: // 順位をコピーボタン CopyClipBoard(); // クリップボードにコピーする CreateCommonIntent() // 共有メニューを開き、選択したアプリに貼り付ける break; default: break; } }
2.クリップボードにコピーする
SetClipData()関数内でクリップボードへのコピー処理を行い、成功時と失敗時のメッセージを表示します。
// 「順位をコピー」ボタンを押すとレース結果をコピーする public void CopyClipBoard() { String allText = CreateText(); // 作成したレース結果を取得 // クリップボードへの格納成功時は成功メッセージをトーストで表示 boolean result = SetClipData(allText); if(result) { Toast ts = Toast.makeText(this, "レースの結果をコピーしました。", Toast.LENGTH_SHORT); ts.show(); } else { Toast ts = Toast.makeText(this, "レースの結果のコピーに失敗しました。", Toast.LENGTH_SHORT); ts.show(); } } // テキストデータをクリップボードに格納する // 格納成功時はtrueを返す private boolean SetClipData(String allText) { try { //クリップボードに格納するItemを作成 ClipData.Item item = new ClipData.Item(allText); //MIMETYPEの作成 String[] mimeType = new String[1]; mimeType[0] = ClipDescription.MIMETYPE_TEXT_URILIST; //クリップボードに格納するClipDataオブジェクトの作成 ClipData cd = new ClipData(new ClipDescription("text_data", mimeType), item); //クリップボードにデータを格納 ClipboardManager cm = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); cm.setPrimaryClip(cd); return true; } catch(Exception e) { return false; } }
3.クリップボードからデータを取得する
下記のコードはクリップボードから値を取得する処理です。
ClipboardManager cm = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); // システムのクリップボードを取得 ClipData cd = cm.getPrimaryClip(); // クリップボードからClipDataを取得 ClipData.Item item = cd.getItemAt(0); String cbText = item.getText().toString(); // クリップデータからテキストを取得
4.共有メニューを開く
このCreateCommonIntent()関数は、コピーに成功したクリップボードのテキスト等を各アプリに渡し、共有メニューを開きます。
// 暗黙的インテントで共有メニューを開く private void CreateCommonIntent() { //システムのクリップボードを取得 ClipboardManager cm = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); //クリップボードからClipDataを取得 ClipData cd = cm.getPrimaryClip(); if(cd != null) { // クリップボードにコピーがある場合 ClipData.Item item = cd.getItemAt(0); Intent sendIntent =new Intent(); sendIntent.setAction(Intent.ACTION_SEND); sendIntent.setType("text/plain"); sendIntent.putExtra(sendIntent.EXTRA_SUBJECT, "レースの結果"); // メールアプリの件名に「レースの結果」をセット sendIntent.putExtra(sendIntent.EXTRA_TEXT, item.getText()); // メモ帳のテキスト欄、メールアプリの本文にテキストをセット startActivity(sendIntent); // 共有メニューを開く } }