2016-09-18 2 views
1

Wikipedia says을 통해 GPX 파일의 MIME 유형이 application/gpx+xml임을로드 할 수 없습니다. 확장자가 .gpx 인 파일은 Storage Access Framework

startActivityForResult(
    new Intent(Intent.ACTION_OPEN_DOCUMENT) 
     .addCategory(Intent.CATEGORY_OPENABLE) 
     .setType("application/gpx"), 
     READ_GPX_FILE_REQUEST_CODE 
); 

는 또한이 하나의 시도 : 그래서 나는 다음과 같은 코드를 사용

startActivityForResult(
    new Intent(Intent.ACTION_OPEN_DOCUMENT) 
     .addCategory(Intent.CATEGORY_OPENABLE) 
     .setType("application/gpx+xml"), 
     READ_GPX_FILE_REQUEST_CODE 
); 

을 그리고 최후의 수단으로 나는 Intent#setTypeAndNormalize(String) 방법을 사용했습니다. 행운을 빌어 요 - 파일 선택 대화 상자가 시작될 때 .gpx 확장자를 가진 모든 파일은 회색으로 표시됩니다. 즉, 선택할 수 없습니다. 내 코드에 문제가 있습니까? SAF의 Intent에 미리 구성된 MIME 형식이 있으며 application/gpx+xml은이 집합에 속하지 않습니다.

+1

''*/* "'할 것입니다. – greenapps

+1

@greenapps 예. 그렇지만 사용자가 실수로 gpx 파일 대신 오디오 파일을 선택하면 응용 프로그램이 중단되지 않도록 선택한 파일의 MIME 유형을 확인하는 추가 코드를 작성해야합니다. – aga

답변

2

제공하는 문서의 MIME 유형을 결정하는 것은 문서 제공 업체의 책임입니다. 일부 문서 제공 업체의 경우 업스트림 소스 (예 : 문서 제공 업체를 제공하는 이메일 클라이언트가 이메일의 MIME 헤더에서 MIME 유형의 첨부 파일을 가져올 수 있음)에서 문서 MIME 유형을 알 수 있습니다. 다른 모든 것들은 MimeUtils이라는 내부 클래스에 의존하는 MimeTypeMap에 의존하는 경향이 있습니다.

그리고 MimeUtils은 GPX에 대해 아무런 의미가 없습니다. at least through Android 7.0.

따라서 greenapps의 제안을 받아야하고 */*을 사용해야하며 구문 분석 오류를 처리 할 준비가되어 있어야합니다.

FWIW, MimeUtils에 GPX가 추가되도록 a feature request을 제출했습니다.

+0

답변 감사합니다. – aga

관련 문제