안드로이드 개발 질문/답변
(글 수 45,052)
특정 용도로 사용하기 위해서 제가 임의로 *.my 라는 파일 타입(custom MIME type)을 만들었고,
이 파일을 구동하는 (view 할 수 있는) 어플을 MyView라고 가정하겠습니다.
email을 통해서 a.my라는 제가 정한 파일타입의 파일을 첨부파일로 전송하여 단말에서 이 메일을 확인하고 첨부파일을 클릭(터치?)하면
자동으로 MyView 어플이 실행되도록 하고 싶습니다.
먼저 해당 어플이 실행되도록 하기 위해서는 Intent를 이용하는것으로 알고 있습니다.
MyView어플에 Intent filter를 설정하고 특정 MMIE type을 설정해주고 Intent를 호출(?)하는 쪽에서 같은 type을 Intent.setType 메소드를 통해서 호출해주면 어플이 정상적으로 실행이 되더군요.
그런데 email 소스를 보니 첨부파일은 다음과 같이 setType 메소드 호출 없이 startActivity를 호출하더군요.
Intent intent= new Intent(Intent.ACTION_VIEW);
intent.setData(uri);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(intent);
startActivity를 호출할때 setType으로 type 을 설정해주지 않으면 그래서 그런지 MyView어플이 실해되질 않더군요.
아무래도 자동적으로 해당 MIME type을 핸들링 할 수 있는 루틴을 처리해 주어야 하는것 같은데요..
이것을 하기위해서 알아보니 custom mime type을 설정하기 위해서는 content provider를 사용해야 하는것 같더군요.
그래서 MyView어플에서 MyContentProvider라는 ContentProvider의 subclass를 만들었습니다.
그리고 MyView의 AndroidManifest.xml 파일에 다음과 같이 provider 부분을 추가하였습니다.
<provider android:name="com.example.testviewer.MyContentProvider"
android:authorities="com.example.testviewer.mycontentprovider"
/>
이렇게 했는데도 여전히 MyView는 실행되질 않네요.
아직 각각에 대해서 정확히 이해가 되질 않아서 그런지 어디가 잘못되었는지 모르겠네요.
아마도 MyContentProvider를 작성하는 부분에서 문제가 있지 않았을까 생각이 들고, *.my 라는 파일타입과 MyContentProvider를 어떻게 연결시켜 주어야 하는지 잘 모르겠습니다.
MyContentProvider는 웹상의 소스(http://about-android.blogspot.com/2010/04/content-provider-example-3.html)를 참고했습니다.
조언을 부탁드립니다.
이 파일을 구동하는 (view 할 수 있는) 어플을 MyView라고 가정하겠습니다.
email을 통해서 a.my라는 제가 정한 파일타입의 파일을 첨부파일로 전송하여 단말에서 이 메일을 확인하고 첨부파일을 클릭(터치?)하면
자동으로 MyView 어플이 실행되도록 하고 싶습니다.
먼저 해당 어플이 실행되도록 하기 위해서는 Intent를 이용하는것으로 알고 있습니다.
MyView어플에 Intent filter를 설정하고 특정 MMIE type을 설정해주고 Intent를 호출(?)하는 쪽에서 같은 type을 Intent.setType 메소드를 통해서 호출해주면 어플이 정상적으로 실행이 되더군요.
그런데 email 소스를 보니 첨부파일은 다음과 같이 setType 메소드 호출 없이 startActivity를 호출하더군요.
Intent intent= new Intent(Intent.ACTION_VIEW);
intent.setData(uri);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(intent);
startActivity를 호출할때 setType으로 type 을 설정해주지 않으면 그래서 그런지 MyView어플이 실해되질 않더군요.
아무래도 자동적으로 해당 MIME type을 핸들링 할 수 있는 루틴을 처리해 주어야 하는것 같은데요..
이것을 하기위해서 알아보니 custom mime type을 설정하기 위해서는 content provider를 사용해야 하는것 같더군요.
그래서 MyView어플에서 MyContentProvider라는 ContentProvider의 subclass를 만들었습니다.
그리고 MyView의 AndroidManifest.xml 파일에 다음과 같이 provider 부분을 추가하였습니다.
<provider android:name="com.example.testviewer.MyContentProvider"
android:authorities="com.example.testviewer.mycontentprovider"
/>
이렇게 했는데도 여전히 MyView는 실행되질 않네요.
아직 각각에 대해서 정확히 이해가 되질 않아서 그런지 어디가 잘못되었는지 모르겠네요.
아마도 MyContentProvider를 작성하는 부분에서 문제가 있지 않았을까 생각이 들고, *.my 라는 파일타입과 MyContentProvider를 어떻게 연결시켜 주어야 하는지 잘 모르겠습니다.
MyContentProvider는 웹상의 소스(http://about-android.blogspot.com/2010/04/content-provider-example-3.html)를 참고했습니다.
조언을 부탁드립니다.
2010.05.06 13:55:36
/회색님, 조언 감사합니다.
우선 AndroidManifest.xml 파일에 Intent filter를 첨부하고 관련mimetype을 정해놓았습니다.(application/vnd.sss.my) 그리고 <data> 에 pathPattern을 첨가하였고요. (이렇게요..<data android:pathPattern=".*\\.my"/> )
email을 보낼때 해당 email의 MIME type을 똑같게 맞추어서 전송했고 단말에 있는 Gmail client를 통해서 해당 첨부파일을 여니(이부분에서 특이한것은 다운로드는 안되고 미리보기만 되더군요.) 해당 어플이 제대로 실행되었습니다.
웹브라우저에서 열때도 정상적으로 실행되었고요. 그런데 단말의 email client에서 exchange server로 등록된 계정에서 메일을 읽어 첨부파일을 실행하면 정상적으로 실행되질 않네요. 아마도 실행이 되는것들은 email로부터 MIME type을 읽어서 setType을 호출한다음 startActivity를 실행하지 않나 싶네요.
content provider를 이용하면 MIME type을 새롭게 등록할 수 있을까요?
우선 AndroidManifest.xml 파일에 Intent filter를 첨부하고 관련mimetype을 정해놓았습니다.(application/vnd.sss.my) 그리고 <data> 에 pathPattern을 첨가하였고요. (이렇게요..<data android:pathPattern=".*\\.my"/> )
email을 보낼때 해당 email의 MIME type을 똑같게 맞추어서 전송했고 단말에 있는 Gmail client를 통해서 해당 첨부파일을 여니(이부분에서 특이한것은 다운로드는 안되고 미리보기만 되더군요.) 해당 어플이 제대로 실행되었습니다.
웹브라우저에서 열때도 정상적으로 실행되었고요. 그런데 단말의 email client에서 exchange server로 등록된 계정에서 메일을 읽어 첨부파일을 실행하면 정상적으로 실행되질 않네요. 아마도 실행이 되는것들은 email로부터 MIME type을 읽어서 setType을 호출한다음 startActivity를 실행하지 않나 싶네요.
content provider를 이용하면 MIME type을 새롭게 등록할 수 있을까요?