2012-04-03 8 views
2

내 앱이 서버에서 파일을 다운로드 한 다음 외부 타사 앱에서 파일을 열 수있는 기능을 사용하고 있습니다 (사용자가 파일을 볼 수있는 앱이 설치되어 있다고 가정 할 때). 유형).Android : 다운로드 한 파일 공유하기

파일은 MIME 형식 및 파일 확장명이 포함 된 메타 데이터와 함께 바이트 배열로 다운로드되어 저장됩니다.

사용자 정의 ContentProvider은 내 앱이 다운로드 한 파일을 제어해야하므로 명백한 방법 인 것 같습니다. 즉, 다른 앱의 액세스가 읽기 전용이어야하고 내 앱이 파일을 삭제할 때/제어해야합니다. .

내 맞춤형 ContentProvider을 구현할 때는 몇 가지 사항이 명확하지 않습니다. 난 단지 검토 한 자습서는 그냥 무시하고 openFile()를 구현하고 query(), insert() 등 '아무것도하지 않고'으로 스텁 메소드를 구현하기에 충분이

  1. 사이에 데이터를 공유와 관련 될 듯?
  2. openFile()을 구현한다고 가정하면 바이트 배열에서 ParcelFileDescriptor을 어떻게 만들 수 있습니까?

참고 : 가능한 한 API 레벨 3 (컵 케익)까지 지원해야합니다.

답변

2

좀 더 살펴보고 마지막으로 AttachmentProvider 구현 (전자 메일 클라이언트의 경우) 용으로 this source을 보았습니다.

그래서, 내 자신의 질문에 대답 : 나는 openFile(), getType()query()를 구현해야처럼

  1. 것 같습니다. 그들의 query() 구현은 표시 이름, uri, 파일 크기 및 '_ID'열 (as recommended by the dev guide)에 대한 열에 대한 액세스를 제공합니다.
  2. ParcelFileDescriptor s는 특별히 File과 작동하도록 설계되었습니다. 단서를 작성하는 유일한 방법은 파일 시스템에 바이트 배열을 작성한 다음 FileParcelFileDescriptor을 작성하는 것입니다. 다행히도, 내 애플 리케이션의 개인 폴더에 다른 애플 리케이션이 내 파일을 망쳐 놓지 않도록 쓸 수있는 것 같습니다.
+0

또 다른 가능성은 MemoryFile을 사용하는 것일 수 있습니다. 현재이 솔루션을 사용하고 있습니다. 성능은 일반 파일보다 빠릅니다. – Georgie

+0

위의 내 의견에 대해서는 ContentFile openFile() 구현에서 MemoryFile을 사용해 보았지만 성공하지 못했습니다. 한 가지 이유는 최근 Android 버전에서 MemoryFile과 관련된 ParcelFileDescriptor에 대한 지원이 사라졌습니다. 그 전에도 액세스하려면 반사 트릭이 필요했습니다. – Georgie

+0

바이트 배열을'ParcelFileDescriptor'에 전달할 방법이 있습니까? 보안상의 이유로 PDF 파일을 휴대폰에 저장할 수 없습니다. –

관련 문제