今回は「表示しているテキストをコピペしたいな」と、そんなお話です。具体的には、表示している情報をメモ帳に貼り付けたりメールで送る方法をここではご紹介します。下記処理はクリップボードにコピーする処理となります。
//クリップボードに格納する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); // 共有メニューを開く
}
}





