ClipboardManagerを使用してテキストのコピーと貼り付けを行う(Android3.0版)ではテキストのコピーを、ClipboardManagerでIntentをコピーするではIntentのコピーを紹介しましたが、今回はUriをコピーする方法を紹介します。
Uriのコピーは、WEBアドレスだけでなく、端末内のコンテンツの場所などもコピーできる為、非常に強力な機能です。
詳細は以下から。
Uriのコピー
UriのコピーはClipDataクラスのnewUri (ContentResolver resolver, CharSequence label, Uri uri)メソッドを使用して、ClipDataオブジェクトを作成してから、システムのクリップボードに作成したClipDataオブジェクトをセットします。(ClipDataの詳細はこちら)
//外部メモリから画像のUriを取得 Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; //ClipDataオブジェクトの作成 ClipData cd = ClipData.newUri(getContentResolver(), "Uri", uri); //システムのクリップボードオブジェクトを取得 ClipboardManager cm = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); //Uriをクリップボードへコピー cm.setPrimaryClip(cd);
クリップボードからUriを取り出す
コピーしたUriを取り出すにはClipData.ItemクラスのgetUriメソッドを使用します。
Uriには様々なコンテンツのMIME typeがある為、クリップボードからの取得時に、目的のMIME typeであるかをしっかりと確認しなければなりません。
以下のサンプルはUriの取得からMIME typeの確認までを記載しています。
//システムのクリップボードオブジェクトを取得
ClipboardManager cm = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
//クリップボードからUriを取得
Uri uri = cm.getPrimaryClip().getItemAt(0).getUri();
//ContentResolverを取得
ContentResolver cr = getContentResolver();
//クリップボードから取得したUriのMime Typeを取得
String mimeType = cr.getType(uri);
if(mimeType != null){
//MIME_TYPEが取得したいデータのものであるか確認
if(mimeType.equals(MediaStore.Images.Media.CONTENT_TYPE)){
Cursor pasteCursor = cr.query(uri, null, null, null, null);
if(pasteCursor != null){
if(pasteCursor.moveToFirst()){
//データ取得処理
}
}
}
}
15行目のMIME_TYPEの確認は画像データ用のMIME_TYPE定数を使用しています。
以下に画像以外の代表的なMIME_TYPEを紹介します。
| MediaStore.Audio.Media.CONTENT_TYPE | オーディオファイルのMIME_TYPEです |
| MediaStore.Video.Media.CONTENT_TYPE | ビデオファイルのMIME_TYPEです |