プロソフト ロゴ

有限会社プロソフト

家庭用ゲーム(コンシューマ)、ソーシャルゲーム(ネイティブアプリ/サーバー)の開発会社


クリップボードに文字列を保存する

文責:black

クリップボードに文字列を保存する

クリップボードに文字列を保存する機能に関する備忘録

■クリップボードとは?

PCやスマートフォン等でコピー&ペーストを行う際に、
コピー内容を一時的に保存する箇所の事をクリップボードと呼びます。

Webサイト内に記載されているURLをコピーしたり、
Webサイト内に記載されている文章をそのままコピーしたい場合などに使用します。

■クリップボードにテキストを保存できるアプリについて

クリップボードにテキストを保存できるアプリで、実際に便利だと感じたケースとして、
多国籍展開されているゲームのチャットに、チャットのテキストをクリップボードに保存する機能があり、
これが非常に便利だと思いました。

そのゲームは多国籍展開されているゲームなので、プレイヤーが世界中の言語を使用しています。
日本語以外の言語でやり取りをする際に、翻訳したいテキストをクリップボードに保存する事ができると、

翻訳したいテキストをクリップボードに保存
 ↓
翻訳ソフトにペースト
 ↓
翻訳ソフトで翻訳

といった風に、知らない言語の文章をキーボード入力せずに翻訳できるため、
例えばロシア語など、キーボード入力が難しい言語でも容易に翻訳できます。

これは、多国籍展開していてチャット機能があるアプリには必須の機能であると感じました。

■クリップボードにテキストを保存できないアプリについて

クリップボードにテキストを保存できないアプリで、
クリップボードにテキストを保存する機能があった方が良いかも知れないと感じたケースとして、
日本語でのみ展開されているアプリを他の地域で使用するケースがあります。

過去に、タイ人の友人から、日本語アプリのスクリーンショットが送られてきて、
ここに何と書いてあるか、英語で答えて欲しいという趣旨の依頼を受けた事がありました。

日本語でしかリリースされれいないアプリを、日本語が使えないユーザーが遊ぶという事が実感できた出来事でしたが、
もしもそのアプリに、ルール説明などの文章をクリップボードに保存する機能があれば、
その友人は自力で翻訳ソフトにテキストをコピー出来たのでは無いかとも思いました。

■実装(Android)

import android.content.ClipData;
import android.content.ClipDescription;
import android.content.ClipboardManager;

/**
 * クリップボードにテキストを保存する
 * @param[in] text クリップボードに保存する文字列
 */
public void setClipboardText(String text) {
	ClipData.Item item = new ClipData.Item(text);
	String[] mimeType = new String[1];
	
	mimeType[0] = ClipDescription.MIMETYPE_TEXT_PLAIN;
	ClipData cd = new ClipData(new ClipDescription("text_data", mimeType), item);
	ClipboardManager cm = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
	cm.setPrimaryClip(cd);
}

■実装(iOS)
/**
 * クリップボードにテキストを保存する
 * @param[in] p_str : クリップボードに保存する文字列
 */
void setClipboardText(const char* p_str) {
	@autoreleasepool
	{
		NSString *p_text = nil;
		
		if( p_str != NULL ) {
			p_text = [[NSString alloc] initWithCString:p_str encoding:NSUTF8StringEncoding];
			
			UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
			if( pasteboard == nil ) return;
			
			[pasteboard setValue:p_text forPasteboardType:@"public.text"];
		}
	}
}