상세 컨텐츠

본문 제목

[안드로이드] MediaStore 파일 읽기

Android

by choiDev 2019. 7. 16. 13:12

본문

안녕하세요 초이입니다.

 

저번 게시물인 MediaStore를 활용하여 파일 쓰기 예제를 이어

이번 시간에는 파일 읽기 코드를 보도록 하겠습니다.

 

MideaStore 파일 읽기

 - 이미지 파일 읽기

private void readFile() {
        Uri externalUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
        String[] projection = new String[]{
                MediaStore.Images.Media._ID,
                MediaStore.Images.Media.DISPLAY_NAME,
                MediaStore.Images.Media.MIME_TYPE
        };

        Cursor cursor = getContentResolver().query(externalUri, projection, null, null, null);

        if (cursor == null || !cursor.moveToFirst()) {
            Log.e("TAG", "cursor null or cursor is empty");
            return;
        }

        do {
            String contentUrl = externalUri.toString() + "/" + cursor.getString(0);

            try {
                InputStream is = getContentResolver().openInputStream(Uri.parse(contentUrl));
                
                if(is != null){
                	Bitmap bitmap = BitmapFactory.decodeStream(is);
					is.close();
				}
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

        } while (cursor.moveToNext());
    }

 

- 비디오 파일 읽기

private void readFile() {
        Uri externalUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
        String[] projection = new String[]{
                MediaStore.Video.Media._ID,
                MediaStore.Video.Media.DISPLAY_NAME,
                MediaStore.Video.Media.MIME_TYPE
        };

        Cursor cursor = getContentResolver().query(externalUri, projection, null, null, null);

        if (cursor == null || !cursor.moveToFirst()) {
            Log.e("TAG", "cursor null or cursor is empty");
            return;
        }

        do {
            String contentUrl = externalUri.toString() + "/" + cursor.getString(0);

            try {
                InputStream is = getContentResolver().openInputStream(Uri.parse(contentUrl));
                 
                if (is != null) {
                     byte[] buffer = new byte[is.available()];
                     is.read(buffer);

                     File targetFile = new File(getFilesDir()+"/"+"video.mp4");
                     OutputStream outStream = new FileOutputStream(targetFile);
                     outStream.write(buffer);

                     Log.e("tag", "bitmap: " + fileName);
                }

                is.close();

            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

        } while (cursor.moveToNext());
    }

 

- 오디오 파일 읽기

 private void readFile() {
        Uri externalUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
        String[] projection = new String[]{
                MediaStore.Audio.Media._ID,
                MediaStore.Audio.Media.DISPLAY_NAME,
                MediaStore.Audio.Media.MIME_TYPE
        };

        Cursor cursor = getContentResolver().query(externalUri, projection, null, null, null);

        if (cursor == null || !cursor.moveToFirst()) {
            Log.e("TAG", "cursor null or cursor is empty");
            return;
        }

        do {
            String contentUrl = externalUri.toString() + "/" + cursor.getString(0);

            try {
                InputStream is = getContentResolver().openInputStream(Uri.parse(contentUrl));
                int data = 0;
                StringBuilder sb = new StringBuilder();

                while ((data = is.read()) != -1) {
                    sb.append((char) data);
                }

                is.close();

            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

        } while (cursor.moveToNext());
    }

 

 

네 이상입니다.

실제로 Q버전에서 동작시켜보고 올린 코드입니다.

제가 부연설명을 다 빼고 코드만 올리니깐 햇갈리시는 분도 있겠지만

코드만 보시고도 응용하실 수 있는 분들을 위해 올린거니

혹시 이해 안되는 부분이 있다면 댓글에 글 남겨주시면 답변해드리겠습니다.

 

항상 글 읽어 주셔서 감사합니다.

관련글 더보기