Notice
Recent Posts
Recent Comments
Link
투케이2K
1038. (Android/Java) [간단 소스] 안드로이드 MediaScannerConnection.scanFile 설명 및 특정 파일을 갤러리 및 음악 앱 등에서 즉시 표시 본문
Android
1038. (Android/Java) [간단 소스] 안드로이드 MediaScannerConnection.scanFile 설명 및 특정 파일을 갤러리 및 음악 앱 등에서 즉시 표시
투케이2K 2025. 10. 17. 15:32728x90
[개발 환경 설정]
개발 툴 : AndroidStudio
개발 언어 : Java / Kotlin

[소스 코드]
// --------------------------------------------------------------------------------------
[개발 및 테스트 환경]
// --------------------------------------------------------------------------------------
- 언어 : Java / Kotlin
- 개발 툴 : AndroidStudio
- 기술 구분 : Android / MediaScannerConnection / Intent.ACTION_MEDIA_SCANNER_SCAN_FILE
- 사전) 안드로이드 Build.gradle 설정 사항 :
android {
// [컴파일 버전]
compileSdk 34
// [Config 셋팅]
defaultConfig {
// ----------------------------
applicationId "com.example.javaproject" // 앱 아이디
// ----------------------------
versionCode 1 // 빌드 버전
// ----------------------------
versionName '1.0.1' // 빌드 네임
// ----------------------------
minSdk 24 // 최소 빌드 버전
// ----------------------------
targetSdk 34 // TODO 타겟 빌드 버전
// ----------------------------
}
// [컴파일 자바 버전 지정]
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
// [아파치 http 사용 설정]
useLibrary ('org.apache.http.legacy')
}
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[소스 코드]
// --------------------------------------------------------------------------------------
// -----------------------------------------
// [필요 변수 선언]
// -----------------------------------------
//String FILE_PATH = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/my_file.jpg";
String FILE_PATH = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/video.mp4";
Context mContext = A_Test_Activity_Start.this;
// -----------------------------------------
// [특정 폴더에 저장 된 이미지 및 동영상 파일 즉시 갤러리에 표시 수행]
// -----------------------------------------
File file = new File(FILE_PATH);
if (file.exists() == true){
// ------------------------------------------------
// TODO Android 분기 처리 수행
// ------------------------------------------------
// 1. MediaScannerConnection.scanFile() 는 안드로이드에서 파일(특히 이미지, 비디오, 오디오 등 미디어 파일)을 시스템 미디어 데이터베이스에 등록하기 위해 사용하는 메서드입니다
// ------------------------------------------------
// 2. MediaScannerConnection.scanFile() 메서드를 호출하면 해당 파일이 갤러리나 음악 앱 등에서 바로 인식될 수 있게 됩니다.
// ------------------------------------------------
// 3. MediaScannerConnection.scanFile() 를 사용하기 위한 조건 및 주의 사항 :
// >> 파일 경로가 정확해야 함
// >> 파일이 실제로 존재해야 함
// >> Android 10(Q) 이하 : READ_EXTERNAL_STORAGE 권한만 있으면 다운로드 폴더의 파일을 스캔할 수 있습니다
// >> Android 11(R) 이상 : MediaScannerConnection.scanFile()은 파일을 읽는 것이 아니라 시스템에 등록 요청만 하는 것이기 때문에, 다운로드 폴더 파일 경로에 접근 가능하고 파일이 존재한다면 MANAGE_EXTERNAL_STORAGE 없이도 작동할 수 있습니다.
// ------------------------------------------------
if (Build.VERSION.SDK_INT <= 24) { // TODO Android 7.0 이하
S_Log._D_("Android Version :: Build.VERSION.SDK_INT <= 24 (OS 7.0)", null);
Uri uri = Uri.fromFile(file);
Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri);
mContext.sendBroadcast(intent);
S_Log._W_(특정 파일 갤러리 및 음악 앱 인식 요청 :: Build.VERSION.SDK_INT <= 24 (OS 7.0) :: Success, null);
}
else { // TODO Android 7.1 이상
S_Log._W_("Android Version :: Build.VERSION.SDK_INT >= 25 (OS 7.1)", null);
// ------------------------------------------------------
// D/InputTransport: Input channel destroyed: 'ClientS', fd=140
// ------------------------------------------------------
// D/MediaScannerConnection: Scanned /storage/emulated/0/Download/video.mp4 to content://media/external_primary/video/media/1000003511
// ------------------------------------------------------
MediaScannerConnection.scanFile(
mContext, // Context 객체
new String[]{ file.getAbsolutePath() }, // 스캔할 파일 경로 배열
null, // // MIME 타입 (null이면 자동 추정) : ex - new String[]{"video/mp4"},
new MediaScannerConnection.OnScanCompletedListener() {
@Override
public void onScanCompleted(String path, Uri uri) {
S_Log._W_("MediaScannerConnection scanFile :: onScanCompleted", new String[]{
"path :: " + String.valueOf(path),
"uri :: " + String.valueOf(uri)
});
if (C_Util.stringNotNull(path) == true && uri != null && uri.getPath() != null){
S_Log._W_("특정 파일 갤러리 및 음악 앱 인식 요청 :: Build.VERSION.SDK_INT >= 25 (OS 7.1) :: Success", null);
}
else {
S_Log._E_("특정 파일 갤러리 및 음악 앱 인식 요청 :: Error :: onScanCompleted Path Is Null", null);
}
}
});
}
}
else {
S_Log._E_("특정 파일 갤러리 및 음악 앱 인식 요청 :: Error :: File Path Not Exists", null);
}
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------
[안드로이드 os 11 (R 버전) 이상 모든 파일 접근 액세스 권한 부여 - MANAGE_EXTERNAL_STORAGE]
https://blog.naver.com/kkh0977/222594585420?trackingCode=blog_bloghome_searchlist
[Android] java.nio.file.AccessDeniedException 저장소 접근 이슈
https://blog.naver.com/kkh0977/223477410219?trackingCode=blog_bloghome_searchlist
[Android] Environment.isExternalStorageManager 사용해 파일 권한 체크 시 항상 return false 이슈
https://blog.naver.com/kkh0977/223264784573?trackingCode=blog_bloghome_searchlist
[android 12 / target 31] Scoped Storage 미디어 스토어 커서 컬럼 인덱스 호출 - getColumnIndex
https://blog.naver.com/kkh0977/222946999349?trackingCode=blog_bloghome_searchlist
// --------------------------------------------------------------------------------------
728x90
반응형
'Android' 카테고리의 다른 글
Comments
