【Android】クリップボードにコピーする

今回は「表示しているテキストをコピペしたいな」と、そんなお話です。具体的には、表示している情報をメモ帳に貼り付けたりメールで送る方法をここではご紹介します。下記処理はクリップボードにコピーする処理となります。

    //クリップボードに格納する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);

上記コードを使用して馬の順位をコピペするアプリを作成してみました。参考になれば幸いです。

%e9%a6%ac%e3%81%ae%e9%a0%86%e4%bd%8d

 

 

 

 

 

 

 


  1. ボタンクリックイベント
  2. クリップボードにコピーする
  3. クリップボードからデータを取得する
  4. 共有メニューを開く

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);                                    // 共有メニューを開く
    }
}

「順位をコピー」ボタンをクリックしました。
%e5%85%b1%e6%9c%89%e3%83%a1%e3%83%8b%e3%83%a5%e3%83%bc%e9%96%8b%e3%81%8f

 

 

 

 

 

 

 

 

SuperNoteで共有をタップし、メモ帳を起動しました。
%e3%83%a1%e3%83%a2%e5%b8%b3%e8%b5%b7%e5%8b%95

 

 

 

 

 

 

 

 

メールで共有をタップし、メールアプリを起動しました。
%e3%83%a1%e3%83%bc%e3%83%ab%e3%82%a2%e3%83%97%e3%83%aa%e8%b5%b7%e5%8b%95