2014-07-18 4 views
1

인터넷에서 파일을 다운로드하고 타사 응용 프로그램을 사용하여이 파일을 열 수있는 응용 프로그램을 만들고 있습니다. 난 내 개인 응용 프로그램 디렉토리에 getFilesDir()을 사용하여 이러한 파일을 저장합니다.Android : 타사 앱으로 개인 파일 열기

그러나 이러한 파일을 열려고 시도하면 (예 : this one과 같은 타사 앱 선택기를 사용하여) 파일을 열 수 없으므로 이러한 파일에 타사 응용 프로그램에서 액세스 할 수없는 것 같습니다. 파일을 다른 앱과 공유 할 수 있도록 허용해야합니까?

EDIT : 액세스를 제공하려는 타사 앱의 패키지 이름을 지정해야합니다. 이 정보가 맞습니까, 아니면 일반적인 제 3 자 액세스를 제공하는 해결 방법이 있습니까?

답변

1

두 가지 옵션이 있습니다.

당신은 안드로이드 문서의 완전하고 업데이트 예를 가지고 FileProvider

같은 응용 프로그램 등록 : 어떤 타사 응용 프로그램에 대한 액세스를 제공하려면 https://developer.android.com/reference/android/support/v4/content/FileProvider.html

것은,이 해결 방법을 사용할 수 있습니다 :

Intent intent = new Intent(); 
intent.setAction(Intent.ACTION_SEND); 
(...) 
List<ResolveInfo> resInfoList = context.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); 
for (ResolveInfo resolveInfo : resInfoList) { 
    String packageName = resolveInfo.activityInfo.packageName; 
    context.grantUriPermission(packageName, uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION); 
} 

저장을 대용량 저장 장치에있는 파일을 (SDCARD)

예를 들어 6,

:

File sdCard = Environment.getExternalStorageDirectory(); 
File dir = new File (sdCard.getAbsolutePath() + "/newDir"); 
dir.mkdirs(); 
File file = new File(dir, "filename"); 

FileOutputStream f = new FileOutputStream(file); 
... 

어느

그것은 당신의 목표에 따라 선택합니다.

사용자가 usb를 통해 파일에 액세스 할 수있게하려는 경우 앱을 제거한 후에도 파일을 사용할 수있게하려는 경우 해당 파일의 "사용 된 공간"수가 앱에 추가되지 않도록 ... "대량 저장 장치 방식"은 갈 길입니다.

이 파일을 앱에 "묶어두기"를 원하면 앱을 설치 한 동안에 만 사용할 수 있습니다. 앱을 통해서만 액세스 할 수 있습니다. "FileProvider 방식"이 최선의 방법입니다.

안드로이드에서 "대용량 기억 장치 방식"은 합리적인 데이터가 아닌 경우 더 선호됩니다. Android 사용자는 '체인'/ 제한을 좋아하지 않습니다.

+0

감사합니다. SD 메모리 카드를 사용하기 위해 Context.getExternalDir (null)을 사용하여 애플리케이션 공개 스토리지를 사용하기로했습니다. 그냥 호기심에서, 당신의 해결 방법은 어떻게 작동합니까? – woojoo666

+1

해결 방법은 의도를 처리 할 수있는 응용 프로그램 목록을 검색 한 다음 모든 항목에 권한을 부여하는 것 (하나씩)을 기반으로합니다. 그다지 아름답지는 않지만 (안드로이드는 아마도 이것을 이미 통합해야만 할 것입니다.) 그러나 일을 끝내게됩니다. –

+0

소리가 나에게 충분 해, 고마워! – woojoo666

1

이 경우 권장되는 방법은 앱이 FileProvider으로 작동하여 타사 응용 프로그램에 파일에 대한 임시 액세스 권한을 부여하는 것입니다.

또는 DownloadManager 구성 요소를 사용하여 파일을 다운로드하고 장치의 특정 위치에 유지할 수 있습니다. 다운로드하려는 파일이 앱에 비공개가 아니며 제 3 자 구성 요소에 영구적으로 액세스 할 수있게하려는 경우 다운로드 관리자를 사용하여 다운로드 한 파일에 대한 미디어 검색을 시작합니다. 다른 앱에 MediaStore

DownloadManager을 사용하면 파일 다운로드를 직접 처리해야하는 것보다 몇 가지 이점이 있으며 사용자 환경 측면에서 자연스럽게 통합됩니다.