2016-11-28 1 views
0

인터넷에서 데이터가 다운로드 된 2 개의 앱을 작성했습니다.android apps간에 불변의 파일 공유하기

이 데이터 (약 4MB, 일부 zip 파일)는 동일하므로 2 개의 앱간에 공유하여 사용자가 적은 대역폭과 적은 저장 공간을 사용하도록하고 싶습니다. 순간

, 나는 좋은 해결책이 발견되지 않은 :

  • Originaly을, 나는 대중 다운로드 디렉토리에 데이터를 저장. 이것은 간단한 해결책이지만 읽기 권한이 필요하므로이를 피하고 싶습니다.
  • 그럼 내가 정보 제공자 사용할 수 있다고 생각 (그리고에는 InputStream을하고 ByteBuffer의 mmaped) 핵심하지만, 내 애플 리케이션이 큰 ZipResourceFile 많은 zip 파일을 을 넣어 : 일부 압축 파일 읽기 및 일부 압축 파일을 복사 내가

    또한 내 데이터의 압축을 위해 ZipFile를 얻을 수있는 파일을 필요로하는 mmaped 및

그래서 루씬 데이터베이스로 사용되는, 나는 그것을 구축하는 것이 가능하다, 간단한 FileProvider 잊을 수 내 파일이 큰 ZipResourceFile에 저장 될 ZipFileProvider 좀 그런 ZipFileContentProvider을 통해의 ByteBuffer를 mmaped 얻는 경우가 길고 안전한 생활을 할 수있을 것인가,
https://github.com/jarondl/android-zipfileprovider/blob/master/src/net/jarondl/zipfileprovider/ZipFileProvider.java

을하지만 : 우이 라이브러리 같은 콘텐츠 공급자는 무엇입니까? (서비스를 사용해야합니까?) 서비스를 제공 한 ZipFileContentProvider의 프로세스가 중단되면 어떻게됩니까? 메모리 사용량은 어떻게됩니까? 주의 사항은 무엇입니까? ContentProvider는 수명이 다 된 방식으로 사용되지 않습니까?

더 좋은 솔루션이 있습니까?

업데이트 :

정말 안드로이드가 같은 developper (다른 및 아무도)에서 몇 가지 애플 리케이션을위한 디렉토리를 공유 할 수 안됐다. 아니면 가능합니까?

UPDATE2 :

은 내가 getExternalFilesDir()에 파일을 저장하지만, 다음과 같은 공식 경고가 나를 매우 긴장하고있다 생각 (쓰기에 대해 무엇을?)에 의해 제공되는 디렉토리 비록

주의 getExternalFilesDir() 및 getExternalFilesDirs()는 MediaStore 콘텐츠 공급자가 액세스 할 수 없으며 READ_EXTERNAL_STORAGE 권한이있는 다른 응용 프로그램은 을 포함하여 외부 저장소의 모든 파일에 액세스 할 수 있습니다. 을 사용하여 파일에 대한 액세스를 완전히 제한하려면 내부 저장소에 파일 을 작성해야합니다.

+0

ZipInputStream wrapping을 사용할 수 없습니까? ContentResolver에서 열린 InputStream을 사용할 수 없습니까? –

+0

그것에 대해 생각하지 않았습니다. 마지막으로 zipEntry를 읽으려면 전체 파일을 탐색해야 할 때 ZipFileProvider와 비교할 때 성능이 좋지 않아야합니다 ... – Lakedaemon

답변

1

은 정말 안드로이드가 같은 developper에서 몇 가지 애플 리케이션을위한 디렉토리를 공유 할 수 안됐다. 아니면 가능합니까?

당신의 상태를이 이전에 그것의 가능한,하지만 당신이 그것을

Originaly을 피하기 위해 노력하고있다, 나는 대중 다운로드 디렉토리에 데이터를 저장. 이것은 간단한 해결책이지만 읽기 권한이 필요하므로이를 피하고 싶습니다.

읽기 권한 사용에는 아무런 문제가 없습니다. 또는 그 문제에 대한 서면 허가. 당신이 그것을 피하고자하는 특별한 이유가 있습니까?

두 앱에 적절한 읽기/쓰기 권한을 추가하고 나만의 재사용 폴더 구조에 액세스하십시오. 공개 다운로드 디렉토리 일 필요는 없습니다. 예 : <com.MyCompanyNamespace>/Data

그런 다음 당신은 할 수 :

  1. 는 폴더 확인 그렇지
  2. 공용 폴더를 확인하고 폴더로 이동합니다.
  3. 다운로드 사이트로 직접 연결하십시오.

읽기/쓰기 주변 장치 사용에는 아무런 문제가 없습니다. 또한 앱 스토어 또는 앱에서 사용 권한이 필요한 이유를 쉽게 파악할 수 있습니다.

나는 더 많은 질문을했지만, 잘하면이 간단한 대답은 필요성을 제거합니다.

+1

1) money : 일부 사용자는 사용 권한을 요청하는 앱을 사용하지 않습니다. 2) 보안 : 악성 앱이 읽기/쓰기 권한은 외부 저장소 (getExternalFilesDir())에서 내 파일에 액세스하고 미묘하게 파일을 변조하므로 (때로는 응용 프로그램이 충돌 할 수 있습니다)? – Lakedaemon

+0

@ Lakedaemon 1 점에 동의하는 동안, 이것은 설치 전의 사용 권한을 지정하여 모든 것이 재 보증 될 수있는 작은 비율입니다. 일명 애플 리케이션간에 공유 파일을 저장. 장치에서 다른 데이터를 읽지 않습니다. (위에 명시된) 2. 그러면 권한을 읽지 않는 다른 청중을 강타한 것입니다. 그것은 당신의 통제를 넘어 수용 가능합니다. 그러나 그러한 일이 발생하면 모든 파일을 대상으로해야한다는 점을 고려해야합니다 (구체적이지는 않습니다). 모든 앱/기기가 영향을받습니다. 앱이 비난받을 소지가 없습니다. – Doomsknight

+0

각 응용 프로그램에서 getExternalFileDirs()에 데이터를 쓰고 다른 응용 프로그램의 데이터에 액세스 할 수있는 읽기 권한을 요청하는 경우 실제로는 단일 읽기 권한을 요구하면서 최상의 성능을 제공합니다. 더 나은 해결책이 없으면 답을 수락합니다. – Lakedaemon

관련 문제