[android] sdcard에 저장된 이미지가 Android의 갤러리 앱에 표시되지 않습니다.

이미지를 sdcard에 저장했는데 sdcard를 꺼내서 다시 돌려 줄 때까지 갤러리 애플리케이션에 표시되지 않습니다.

왜 그런지 아십니까?

갤러리 애플리케이션에 파일 저장시 업데이트되지 않는 캐시가있는 것 같습니다.

사실, 나는 또한 갤러리 응용 프로그램에서 방금 저장 한 이미지를 열 것을 아무 성공이 없다 할
이 문제에 대한 내 질문입니다.



답변

시스템은 새 이미지 (및 기타) 파일을 찾기 위해 마운트 될 때 SD 카드를 스캔합니다. 프로그래밍 방식으로 파일을 추가하는 경우 다음 클래스를 사용할 수 있습니다.

http://developer.android.com/reference/android/media/MediaScannerConnection.html


답변

더 간단한 해결책은 정적 편의 메서드 scanFile () 을 사용하는 것입니다 .

File imageFile = ...
MediaScannerConnection.scanFile(this, new String[] { imageFile.getPath() }, new String[] { "image/jpeg" }, null);

this당신의 활동은 어디에 있든 (또는 어떤 컨텍스트 든), mime-type은 비표준 파일 확장자를 사용하고있는 경우에만 필요하고 null는 선택적 콜백을위한 것입니다 (이런 간단한 경우에는 필요하지 않습니다).


답변

원래 질문 및이 문제가있을 수있는 다른 사람에 대한 나의 대답 :

나는 사람들이 SD 카드에 저장 한 내 앱의 이미지가 갤러리에 즉시 표시되지 않는 동일한 문제가 발생했습니다. 몇 가지 검색 후 문제를 해결 한 ‘sdcard에 저장’코드 뒤에 삽입 된 코드 한 줄을 발견했습니다.

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


답변

의도에 따라 이미지를 미디어 갤러리에 추가 할 수도 있습니다. 예제 코드를 살펴보고 어떻게 수행되는지 확인하세요.

ContentValues image = new ContentValues();

image.put(Images.Media.TITLE, imageTitle);
image.put(Images.Media.DISPLAY_NAME, imageDisplayName);
image.put(Images.Media.DESCRIPTION, imageDescription);
image.put(Images.Media.DATE_ADDED, dateTaken);
image.put(Images.Media.DATE_TAKEN, dateTaken);
image.put(Images.Media.DATE_MODIFIED, dateTaken);
image.put(Images.Media.MIME_TYPE, "image/png");
image.put(Images.Media.ORIENTATION, 0);

 File parent = imageFile.getParentFile();
 String path = parent.toString().toLowerCase();
 String name = parent.getName().toLowerCase();
 image.put(Images.ImageColumns.BUCKET_ID, path.hashCode());
 image.put(Images.ImageColumns.BUCKET_DISPLAY_NAME, name);
 image.put(Images.Media.SIZE, imageFile.length());

 image.put(Images.Media.DATA, imageFile.getAbsolutePath());

 Uri result = context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, image);


답변

Android KITKAT을 포함한 갤러리 새로 고침

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
{
        Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
        File f = new File("file://"+ Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES));
        Uri contentUri = Uri.fromFile(f);
        mediaScanIntent.setData(contentUri);
        this.sendBroadcast(mediaScanIntent);
}
else
{
        sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory())));
}


답변

MediaScannerConnection에 대한 코드는 다음과 같습니다.

MyMediaConnectorClient client = new MyMediaConnectorClient(newfile);
MediaScannerConnection scanner = new MediaScannerConnection(context, client);
client.setScanner(scanner);
scanner.connect();

newfile은 새 / 저장된 파일의 파일 개체입니다.


답변

에뮬레이터에 ‘개발 도구’라는 앱이 있습니다.

그것을 클릭하고 ‘미디어 스캐닝’을 선택하십시오 .. 모든 이미지가 스캔됩니다