안녕하세요.
갤럭시S에 설치된 이메일 App에서 첨부파일을 터치했을 때,
제가 작성한 intent-filter를 통해서 App이 호출되도록 하고 싶은데 방법을 모르겠습니다.
예를 들어 확장자가 *.ddf인 경우에 App이 호출되도록 하기 위해서
제가 작성한 App의 AndroidManifest의 <intent-filter>에 아래와 같이 추가해주면
Intent를 받아서 App을 띄울 수가 있습니다.
파일탐색기 Astro에서는 App호출 및 intent전달이 잘 되더군요.
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="file" />
<data android:pathPattern=".*\\.ddf" />
<data android:host="*" />
</intent-filter>
그런데 문제는 갤럭시S에 있는 이메일 어플에서는 안된다는 것입니다.
첨부파일을 터치하면 "지원되지 않는 파일형식입니다."라고 나오는데,
그래서,
<data android:mimeType="application/octet-stream" /> 도 추가해보고,
<data android:scheme="file" />을 content로도 해보고 여기저기 찾아보아도,
scheme과 mimeType을 어떻게 설정해줘야 할지, 정말 모르겠습니다.
혹시 이런 방법을 구현해보신 분이 계시면 조언을 부탁드리겠습니다.
감사합니다.
네,
그런데 갤럭시S의 로그를 보면 eMail App의 첨부파일을 클릭했을 때,
1-16 23:10:16.511: INFO/InputDispatcher(135): Delivering touch to current input target: action: 0, channel '40b10110 com.android.email/com.android.email.activity.MessageView (server)
딸랑 이게 끝입니다.
그러니 mimetype을 */*로 설정해줘도 안되는 거죠.
K-9 Mail같은 이메일 어플을 이용해보면, 첨부파일을 클릭했을 때, 다운로드를 하고,
11-17 00:18:29.855: INFO/ActivityManager(135): Starting: Intent { act=android.intent.action.VIEW dat=content://com.fsck.k9.attachmentprovider/305ec075-d689-4a6e-b9d7-7b93fffec4fb/25/VIEW flg=0x1 cmp=com.myMailViewer.Viewer/.startIntro } from pid 28018
요딴 식으로 intent-filter가 되게 해줘야하는데, 갤스의 이메일App은 전혀 아무짓도 안하는 것 같습니다.
이런 식이라면 eMail App을 뜯어 고쳐야한다는 건데...
여기까지만 보면 답이 없어보입니다.
흠...일반적으로 안드로이드에서는 mimtypemap 이 제공되서 확장자에 따른 마임타입을 가져오는 메소드가 존제하는데
native email 에서는 그 절차가 실패하면 */* 로 박아 버립니다.
그럼 모든 어플이 다 떠서 사용자가 하나 고를 수 있게 되죠.
난 모르겠으니깐 사용자 네가 골라라 라는 의미에서 올바른 방식으로 보이죠
근데 삼성 이메일소스를 까볼수도 없으니 확실친 않지만...mimetype mapping이 실패했을땐 걍 해당 처리가 가능한
Action을 만들지 못하고 버리도록 수정한게 아닐까 의심이 되네요
품질관리 절차에서 알수없는 어플들이 왜 다뜨냐 이런식의 문제 제기가 있었을 수도 있지 않을까 조심스래 추측해 봅니다
안타깝지만 현시점에서는 답이 없어 보입니다. 삼성측에 메일이나 한통 써놓고 제사를 지내볼 수밖에요
ddf에 대한 마임타입 매핑을 해달라고...
이게 좀 웃기는게 갤스2의 이메일 App에서는 됩니다.
<data android:host="" android:scheme="file" />
<data android:pathPattern=".*\\.ddf" />
로 해서 String filePath = intent.getData().getPath();가 받아졌습니다. App구동과 파일오픈까지 되네요.
그래서 jpg파일을 첨부해서 해봤는데,
갤스 이메일 App에서는 첨부파일이 jpg인 경우에 터치를 하면 아무 반응을 안하네요.
("지원되지 않는 파일형식입니다."라는 메시지도 없음)
물론, 갤스2에서는 갤러리 또는 Astro이미지뷰어를 선택하라는 창이 나옵니다.
그래서 이번에는 k-9이라는 이메일App을 설치를 해봤는데,
이녀석은 .ddf 첨부파일을 클릭하면, application/octet-stream에 대한 뷰어를 찾을 수 없다고 나오는 군요.
그리고, ePub소설로 많이 이용되는 .epub파일을 볼 수 있는 FBReader를 설치하고,
첨부된 .epub파일을 클릭하면, application/epub+zip에 대한 뷰어를 찾을 수 없다고 나오구요.
FBReader는 소스가 공개되어 있어서 보니까, <data android:mimeType="application/epub+zip" /> 들어가 있던데요.
그래서 제가 만든 App의 mimeType을 application/octet-stream으로 하니,
.ddf첨부파일을 클릭했을 때, 다운로드를 시작하더니, App이 구동되어서 되나 보다 했더니,
String filePath = intent.getData().getPath();로 이상한 값이 들어오는 거에요. 결국 파일open을 못했는데,
ppt같은 첨부파일은 ThinkFree Office가 실행되면서 오픈이 잘되더군요.
이거 참 뭘 어떻게 해야하는지...
이게 mimeType mapping에 문제가 있어서 그런거라면,
혹시 제가 mimeType을 정의하고 이놈을 Map에 넣어서 매핑되게 하는 방법은 없을까요?
mimetype mapping은 Email 에서 하는 거니깐 안도라이두님께서 고칠수 없는 영역입니다.
근데, 어플이 실행은 되는거였군요? 호출조차 안되는 건줄 알았어요.
관련 로그 및 intent.getData().getPath(); 이 값을 볼 수 있을까요?
보통 이메일에서는 첨부파일을 디비에 저장하고 그 디비를 Provider로 엮어서
URI 형태로 전달하더군요. 어쩌면 URI 정보일 수 있어요. URI를 파일로 빼서 볼 수 있을 수도 있겠다 싶네요.
k-9메일이라는 어플에서
App의 mimeType을 application/octet-stream으로 하고,intent.getData().getPath()를 보면,
11-17 13:07:21.105: DEBUG/MAILATT(11535): intent.getData().getPath()=> /305ec075-d689-4a6e-b9d7-7b93fffec4fb/23/VIEW
여기서 /305ec075-d689-4a6e-b9d7-7b93fffec4fb/23/VIEW 요게 뭔지 모르겠네요.
intent.getData().toString()으로 Data전체를 찍어보면,
content://com.fsck.k9.attachmentprovider/305ec075-d689-4a6e-b9d7-7b93fffec4fb/23/VIEW 이렇게 나오는데...
물론 갤스 이메일App에서는 App이 구동조차 되지 않기 때문에, 방법이 없지만,
혹시 k-9이메일 App은 말씀하신대로 DB와 연관이 있고, 이것이 인텐트로 전달되는 것 같기는 합니다만,
한번 봐주시겠습니까?
아 겔스에서는 아예 실행조차 안되고, K-9 에서는 실행은되는 파싱이 안되는거군요
로그 내용으로는 K-9 메일의 content provider URI로 보이네요.
Uri uri = intent.getData();
String filePath = uri.getPath();
하셔서 기존의 파일 처리 로직 타시면 될거 같네요
조언 주신대로 해도 filePath는 여전히 /305ec075-d689-4a6e-b9d7-7b93fffec4fb/23/VIEW입니다.
제가 좀 찾아보니까, 이메일 첨부파일의 scheme이 아래와 같다는 것을 알았습니다.
content://com.android.email.attachmentprovider/acct#/attach#/RAW
acct하고 attach가
305ec075-d689-4a6e-b9d7-7b93fffec4fb과 23에 해당하는 것 같은데,
이것을 이용해서 getDatabasePath를 알아내고 등등 해야 실제로 오픈할 파일의 물리적 위치를 알 수 있는 것 같습니다.
조언 감사드리며, 아무래도 좀 더 봐야할 것 같습니다.
난감하군요 ㅋㅋ;;
다른 이메일에서는 정상동작하는데 갤럭시의 이메일에서만 발생하는 현상인가요?
그렇다면 갤럭시 이메일에서 마임타입분석에 실패하고 마임타입을 "*/*" 처리 했을거에요
님 매니페스트에 mimetype을 */*로 설정하면 결국 연동은 가능할 듯 싶지만...
마임타입을 가리지 않겠다고 선언언한 각종 Activity들도 같이 손들겠죠;;
이건 Email을 뜯어고치지 않는 이상 답이 없어 보입니다;;