ImageView가 설정되어 있고 갤러리에서 클릭하여 열 수있는 응용 프로그램이 있습니다. 기본적으로내부 메모리에 저장된 이미지 공유
, 내 사진과를 저장하는 외부 저장 장치에서 파일 디렉토리를 얻기 위해 다음 코드를 사용
File picsDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),"MyCameraApp");
그러나! 외부 저장소가 마운트되지 않았거나 단순히 존재하지 않는다고 가정하면 (Galaxy Nexus) 작동하지 않습니다. 그래서 if-statement를 써서 내부 캐시 디렉토리를 fallback으로 가져옵니다.
String state = Environment.getExternalStorageState()
if(Environment.MEDIA_MOUNTED.equals(state)){
File picsDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),"MyCameraApp");
}else{
context.getCacheDir();
}
이미지가 ImageView에 잘 표시되지만 내 의도가 시작될 때 나타나지 않습니다.
Intent intent = new Intent();
intent.setAction(android.content.Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(imgFile), "image/jpeg");
startActivity(intent);
갤러리가로드되지만 검은 색 화면이 표시됩니다. 아마도 갤러리가 내 앱의 캐시 디렉토리에있는 파일에 액세스 할 수 없기 때문일 수 있습니다. 대안으로
, 나는MediaStore.Images.Media.INTERNAL_CONTENT_URI
을 사용하는 미디어 콘텐츠 공급자를 사용했지만, inser에 이미지하려고 할 때이 오류로 이어진다
java.lang.UnsupportedOperationException: Writing to internal storage is not supported.
어떻게해야합니까를?
내가 의도와 함께 비트 맵을 포장 시도 할 수 정확하게 문제를 해결 이런 식으로 코드를 변경할 수 있습니까? 'intent.putExtra ("BitmapImage", 비트 맵)처럼; 내 이미지는 일반적으로 약 5MB입니다. – Maarten
이미지를 응용 프로그램의 개인 저장소에 저장하고 일반 읽기 전용 권한 만 허용 할 수 있습니다. 그러나 일부 내장 된 Google 내장 프로그램을 포함하여 많은 응용 프로그램이 경로를 넘겨 받았을 때이 정보에 액세스 할 수 있는지 확인하지는 않지만 간단하게 소유하고있는 응용 프로그램이 사실 전역 읽기 액세스 권한을 부여한 경우에도 실패하거나 실패 할 수 있다고 가정합니다. –