이미지를 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은 새 / 저장된 파일의 파일 개체입니다.
답변
에뮬레이터에 ‘개발 도구’라는 앱이 있습니다.
그것을 클릭하고 ‘미디어 스캐닝’을 선택하십시오 .. 모든 이미지가 스캔됩니다