안드로이드 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 |