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です |