Android Studio

[안드로이드] Android 파일 생성 후 PC 연결 시 안보일 때 (sendBroadcast, MediaScannerConnection)

i-moo 2017. 5. 23. 16:03
반응형

애플리케이션 내에서 파일 생성을 해주고 PC를 연결해서 확인하려고 하면 보이지 않는 경우가 발생한다.


그 이유는 파일 생성을 하였는데 Android에서는 파일 생성에대해서 알지못하기 때문에 케이블을 연결해도 파일이 있는지도 모르는 것이다.


핸드폰을 재부팅 후 케이블을 연결해주면 그 때에는 파일을 인식하는 것을 볼 수 있다.


사용자에게 재부팅하고 사용하라고 할 수 없으니 처리를 해주어야한다. 파일 생성했다는 것을 안드로이드에게 스캔해주는 방법이다.


방법을 찾기위해서 구글링을 많이 해보았지만.. 넘나 찾기 어려운 것 ..


우선 제가 처리한 방법은 MediaScanning 사용하였다.


1.  sendBroadcast 사용


context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,"파일 경로 URI"));

Context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory())));

: 저장소 전체를 스캔하는 방법이다. 하지만 젤리빈 이상 버전에서는 오류 생긴다고 한다. 특정 폴더나 특정 파일을 스캔 시켜야한다.


Context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,Uri.parse("file://"+Environment.getExternalStorageDirectory()+"/temp")));

: 특정 폴더를 스캔하는 방법이다. 버전 타는 경우가 있다고 한다. 테스트를 잘 해보자(전 테스트 해보지 않았습니다. 틀린 내용이 있다면 댓글 적어주세요.)


Context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://"+ file)));

: 특정 파일을 스캔하는 방법이다. 제가 MediaScanning 사용하게 된 이유는 한 파일을 sendBroadcast 해주면 자원 낭비이기 때문입니다.


2. MediaScannerConnection 사용


이 경우는 파일 하나 하나 체크해야하기 때문에 디렉토리를 스캔해주어야하는 경우는 파일 하나하나를 배열에 넣어서 태워야한다.


MediaScannerConnection.scanFile(Context, new String[]{file.getAbsolutePath()}, null, null);


MediaScannerConnection.scanFile(Context, new String[]{file.getAbsolutePath()}, null, new MediaScannerConnection.OnScanCompletedListener() {

@Override

public void onScanCompleted(String path, Uri uri) {

// TODO Auto-generated method stub

// 스캔이 성공으로 끝났을 경우.

Log.i("FILE", "OK");

}

});


3. MediaScanning 클래스를 만들어 사용. (사용한 방법)




클래스를 사진 내용대로 생성해주고.


MediaScanning mediaScanning = new MediaScanning(Context, file);


스캔할 file을 가지고 호출해주면 !! 보인다.!





참고한 사이트 : 

https://stackoverflow.com/questions/13737261/nexus-4-not-showing-files-via-mtp

http://darphin.tistory.com/34

http://egloos.zum.com/dalgopower/v/4380780

https://stackoverflow.com/questions/13507789/folder-added-in-android-not-visible-via-usb

반응형