Mobile/Android

안드로이드 미디어 스캐닝

SambaLim 2019. 3. 30. 23:48
안드로이드 미디어 스캐닝

안드로이드 7.0(Nougat)으로 변경되면서 URI의 path를 알아내는 것이 FileProvider을 사용해야 하므로 특정 디렉토리를 사용하는 것이 어려워졌습니다.

따라서 sendBroadCast를 사용하던 기존 방식에서 Uri.fromFile을 다루는 것이 어려워졌습니다.

Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
intent.setData(Uri.fromFile(file);
sendBroadcast(intent);

 

MediaScanner.java

특정 파일에 미디어 스캔을 하기 위해 MediaScannerConnection을 사용하려 합니다.

다른 class들과 독립적으로 사용하기 위해 MediaScanner.java 를 생성하여 class를 만들어주었습니다.

package com.example.lim.goodroadapp;

import android.content.Context;
import android.media.MediaScannerConnection;
import android.net.Uri;
import android.util.Log;

public class MediaScanner {
    private Context mContext;

    private String mPath;

    private MediaScannerConnection mMediaScanner;
    private MediaScannerConnection.MediaScannerConnectionClient mMediaScannerClient;

    public static MediaScanner newInstance(Context context) {
        return new MediaScanner(context);
    }

    private MediaScanner(Context context) {
        mContext = context;
    }

    public void mediaScanning(final String path) {

        if (mMediaScanner == null) {
            mMediaScannerClient = new MediaScannerConnection.MediaScannerConnectionClient() {
                @Override
                public void onMediaScannerConnected() {
                    mMediaScanner.scanFile(mPath, null);
                }

                @Override
                public void onScanCompleted(String path, Uri uri) {
                    Log.d("Success : ", "MediaScan Complete!");
                    mMediaScanner.disconnect();
                }
            };
            mMediaScanner = new MediaScannerConnection(mContext, mMediaScannerClient);
        }

        mPath = path;
        mMediaScanner.connect();
    }
}

 

Activity

사용하고자 하는 곳에서 아래와 같이 사용하시면 됩니다.

private MediaScanner ms = MediaScanner.newInstance(MainActivity.this);

try {
    // TODO : 미디어 스캔
    ms.mediaScanning(mCurrentPhotoPath);
} catch (Exception e) {
    e.printStackTrace();
    Log.d("MediaScan", "ERROR" + e);
} finally {

}

 

 

'Mobile > Android' 카테고리의 다른 글

안드로이드 Webview 시작하기  (1) 2020.04.26
같은 패키지 명으로 APP 2개 만들기  (0) 2019.05.13
안드로이드 앱 아이콘 설정  (0) 2019.02.10