2011-11-18 2 views
1

보내기 의도를 사용하여 내 응용 프로그램을 사용하여 만든 이미지를 보내려고합니다. 그런 의도의 많은 예를 살펴본 결과 의도를 사용하여 전송할 임시 이미지 파일을 저장하기 위해 외부 저장소를 사용함을 알았습니다.인 텐트 데이터에 외부 저장소를 사용해야하는 이유는 무엇입니까?

외부 저장소가 사용되는 특별한 이유가 있습니까? 외부 저장 장치가 마운트되지 않은 경우 사용자가 웹에 이미지를 게시 할 수 없으므로 위험한 선택입니다. 다소 이상하게 느껴집니다.

또한 앱의 작업 데이터를 어디에 저장 하시겠습니까? onPause()에서 사용자가 내부 저장소에서 작업중인 현재 이미지를 저장하고 있지만 대신 외부 저장소에 저장하는 것이 좋습니다.

답변

2

이것은 이미지가 상당히 클 수 있기 때문에 일반적입니다. 일부 기기의 경우 내부 저장소가 다소 소중합니다 (따라서 Apps2SD의 인기가 높습니다). 또한 때로는 사용자가 앱 외부에서 이러한 이미지에 액세스 할 수 있도록 할 수도 있습니다. 진정으로 일시적인 것이라면 getCacheDir() 또는 getExternalCacheDir()을 사용해야합니다.

저장에 대한 정보는 this doc을 참조하십시오. 해당 문서에 code이있어 외부에 내부 및 폴백을 사용하려는 경우 외부 저장소를 사용할 수 있는지 확인할 수 있습니다.

오, 주된 이유는 단순히 내부 저장소의 덩어리가 앱에서만 액세스 할 수 있다는 것입니다. 보내기 의도가 앱이 아닌 구성 요소 인 경우 내부 저장 영역에 액세스 할 수 없습니다.

+0

예, 이미지는 사용자가 Twitter/Facebook/기타에 게시 할 수 있도록 보내기 의도로 Uri를 보내기 위해 저장됩니다. 나중에 삭제하겠습니다. [openFileOutput()] (http://developer.android.com/reference/android/content/Context.html#openFileOutput%28java.lang.String,%20int%)을 사용하면 다른 앱에서도 사용할 수있게 만들 수 없었습니다. 29) [MODE_WORLD_WRITEABLE] (http://developer.android.com/reference/android/content/Context.html#MODE_WORLD_WRITEABLE)? – Pooks

+0

네, 맞습니다.'MODE_WORLD_WRITEABLE' 또는'MODE_WORLD_READABLE'을 사용하여 만들 수 있습니다. 시나리오에서 내부 스토리지를 사용하면서 모든 예제가 외부를 사용하는 이유를 설명하려고 시도하면서 본질적으로 * 잘못된 * 것을 보지 못합니다. – kabuko

0

이미지는 바이트 배열 형식입니다. 직접 전송할 때 시간이 걸릴 수도 있습니다 (예 : 원격 서버에서 전송하는 경우). 때로는 응용 프로그램이 중단 될 수 있습니다. 따라서 이러한 순차 프로그래밍을 피하기 위해 개발자는 병렬 코드를 사용합니다. 여기서 한 코드는 이미지를 저장 장치에 저장하고 다른 코드는 업로드 부분에 사용합니다.

하나 더 많은 이점은 외부 저장소에 저장하는 동안 이러한 경우를 방지하는 동안 직접 보내는 것이 데이터 손실을 초래할 수 있다는 것입니다.

1

이유는 Android에 IPC 데이터에 제한이 있습니다. 약 1MB입니다. 즉, 의도 한 것보다 많은 것을 넣으면이 의도를 사용하여 활동을 시작하려고 할 때 오류가 발생합니다. 인 텐트를 통해 이미지를 전달하는 유일한 방법은 실제 이미지에 포인터 (URL, 파일 이름)를 전달하는 것입니다. 개인 파일은 응용 프로그램에서만 볼 수 있으므로 외부 (공유) 저장소에 저장하거나 콘텐츠 공급자 URI를 전달해야합니다 (물론 콘텐츠 공급자를 작성해야합니다). 공유 저장 장치가 더 쉬운 방법입니다.