일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- react 기초
- 안드로이드
- mysql uninstall
- Docker ubuntu
- mysql error
- next.js tailwind css
- mysql 재설치
- 리액트 tailwindcss
- Docker
- next.js css framework
- 리눅스
- 리액트 tailwind css
- react tailwindcss
- mysql broken install
- mysql fix install
- mysql 재설치 명령어
- javascript
- Android
- 리액트
- react typescript
- react
- 리액트 문법
- react tailwind css
- mysql 삭제
- mysql purge
- 도커
- Python
- PHP
- next.js tailwindcss
- mysql
- Today
- Total
Developer_hong
[안드로이드/Android] 미디어 스캐너(Media Scanner) 본문
안드로이드 시스템에서 사진첩(갤러리)를 새로고침하는 방법은 대표적으로 2가지가 있다.
1. BroadCast를 이용하는 방법
2. MediaScannerConnection를 이용하는 방법
저는 2번째 MediaScannerConnection 방법을 추천합니다.
3. MediaScanner를 이용하는 방법
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(targetImageFile)));
4. MediaScanner를 이용하는 방법
ex) 레이아웃 이미지로 저장 + 미디어 스캔 : (https://hongdroid.tistory.com/6)
[ 1-1. BroadCast (ACTION_MEDIA_MOUNTED) ]
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,Uri.parse("file://"+Environment.getExternalStorageDirectory())));
-> KITKAT 버전 이후 사용불가
[ 1-2. BroadCast (ACTION_MEDIA_SCANNER_SCAN_FILE) ]
Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
intent.setData(Uri.fromFile(file);
sendBroadcast(intent);
-> 예전엔 잘돼서 이 방법을 사용했는데 안드로이드 7.0 (누가) 버전 이후 잘 안된다
[ 2. MediaScannerConnection ] // MediaScanner.Class 파일 생성하여 코드 추가
import android.content.Context;
import android.media.MediaScannerConnection;
import android.net.Uri;
import android.util.Log;
public class MediaScanner {
private Context ctxt;
private String file_Path;
private MediaScannerConnection mMediaScanner;
private MediaScannerConnection.MediaScannerConnectionClient mMediaScannerClient;
public static MediaScanner newInstance(Context context)
{
return new MediaScanner (context);
}
private MediaScanner (Context context) {
ctxt = context;
}
public void mediaScanning(final String path) {
if (mMediaScanner == null) {
mMediaScannerClient = new MediaScannerConnection.MediaScannerConnectionClient() {
@Override public void onMediaScannerConnected() {
mMediaScanner.scanFile(file_Path, null);
}
@Override public void onScanCompleted(String path, Uri uri) {
System.out.println("::::MediaScan Success::::");
mMediaScanner.disconnect();
}
};
mMediaScanner = new MediaScannerConnection(mContext, mMediaScannerClient);
}
mPath = path;
mMediaScanner.connect();
}
}
위와 같이 MediaScanner.Class 를 만들고 미디어 스캔이 필요한 부분에 아래의 코드를 추가
============================================================
//파일 미디어 스캔
MediaScanner media_scanner = MediaScanner .newInstance(getApplicationContext());
try {
media_scanner.mediaScanning(Str_Path + filename + ".jpg"); // 경로 + 제목 + .jpg
} catch (Exception e) {
e.printStackTrace();
System.out.println(":::: Media Scan ERROR:::: = " + e);
}
============================================================
* 메모
저장된 사진의 폴더 경로를 이용해 MediaScan을 하였더니 안됐다
ex) media_scanner.mediaScanning(Str_Path);
//Str_Path = Environment.getExternalStorageDirectory().getAbsolutePath()+"/DCIM/Camera/";
//저장 시 사용될 폴더 경로 String Type 변수 (/storage/emulated/0/DCIM/Camera/)
해결 -> 폴더 경로가 아니라 직접 파일명+확장자 까지 MediaScan해주니 동작함
ex) media_scanner.mediaScanning(Str_Path+filename+".jpg"); // 경로 + 제목 + .jpg
'프로그래밍 > 안드로이드' 카테고리의 다른 글
[안드로이드/Android] Layout 영역 사진첩 저장 + 미디어 스캔 (0) | 2019.11.18 |
---|---|
[안드로이드/Android] 카카오지도 64bit 대응하기 (0) | 2019.07.23 |
안드로이드 7.0 android.os.FileUriExposedException 에러 (0) | 2018.12.14 |
com.android.support:appcompat 에러 해결 (1) | 2018.07.31 |