2017-02-15 9 views
0

일부 파일 브라우저에서 오디오 파일을 선택/공유 한 후 오디오 파일을 재생하려고합니다. 이렇게하려면 필터 의도를 사용하여 오디오 파일의 Uri를 가져옵니다. 우리에 따라 나는 그것을 할 수있다. Uri는 MediaPlayer에서 FileDescriptor를 여는 데 사용됩니다.기본 "다운로드"앱을 통해 공유 된 파일에 대한 임시 권한 만 있습니까?

앱을 다시 시작한 후에 사용할 수 있도록 Uri를 저장합니다. 그것은 안드로이드의 기본 다운로드 응용 프로그램을 제외한 모든 파일 브라우저에서 작동합니다. 다운로드 응용 프로그램에서 파일을 열면 다음과 같은 Uri가 나타납니다.

재생할 수 있습니다. 하지만 응용 프로그램을 다시 시작한 후에는 더 이상 동일한 URI를 재생할 수 없습니다. 이 권한에 대해 docs에서

java.lang.SecurityException: Permission Denial: 
opening provider com.android.providers.downloads.DownloadStorageProvider from 
ProcessRecord{160760b 3618:com.sample/u0a71} (pid=3618, uid=10071) 
requires android.permission.MANAGE_DOCUMENTS or android.permission.MANAGE_DOCUMENTS 

: 나는 예외가

이 권한은 플랫폼 문서 관리 응용 프로그램에 의해 요청해야합니다. 타사 앱에는이 권한을 부여 할 수 없습니다.

앱에 파일에 대한 임시 사용 권한 만 있다는 의미입니까? 이것에 대한 해결책이 있습니까?

답변

0

그래서 보낸 사람 앱이이 플래그를 사용하여 임시 사용 권한을 설정했다고 알았습니다. FLAG_GRANT_WRITE_URI_PERMISSIONFLAG_GRANT_READ_URI_PERMISSION. 권한은 의도를 처리 한 활동이 활성화되어있는 경우에만 유효합니다. 적어도 이것을 감지하려면 사용하십시오

if ((flags & Intent.FLAG_GRANT_READ_URI_PERMISSION) == Intent.FLAG_GRANT_READ_URI_PERMISSION || (flags & Intent.FLAG_GRANT_WRTITE_URI_PERMISSION) == Intent.FLAG_GRANT_WRITE_URI_PERMISSION) { 
//only temporary permission 
}