안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요.
Intent에서 Uri를 사용하여 새로운 activity 띄울 때가 좀 아리송하네요.
Uri uri = Uri.parse("content://media/internal/images/media");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
위와 같이 코딩하고 실행하면,
Gallery의 두번째 화면 ( 폴더들어가서 폴더 내용 보여주는 것 같은 화면) 이 뜹니다.
그럼 어딘가에서 저 Uri 를 해석해서 Gallery 의 ImageGallery (두번째화면) 를 호출 할텐데요.
이것을 호출되려면,
ImageGallery 액티비티의 Intent-filter 같은곳에 명시를 해 두서야 호출이 될듯한데요.
AndroidManifest.xml 파일을 일부 입니다.
<activity android:name="ImageGallery" android:label="@string/gallery_label"
android:configChanges="orientation|keyboardHidden"
android:icon="@drawable/ic_launcher_gallery">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.dir/image" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.dir/video" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.GET_CONTENT" />
<category android:name="android.intent.category.OPENABLE" />
<data android:mimeType="vnd.android.cursor.dir/image" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.GET_CONTENT" />
<category android:name="android.intent.category.OPENABLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
<data android:mimeType="video/*" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.PICK" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
<data android:mimeType="video/*" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.PICK" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.dir/image" />
</intent-filter>
</activity>
도무지
저 intent-filter 하고 Uri 가 어떻게 맵핑이 되는지 모르겠네요.
Uri 에서 실제 호출되는 activity를 어떻게 알수 있을 까요?
감사합니다.
Intent에서 Uri를 사용하여 새로운 activity 띄울 때가 좀 아리송하네요.
Uri uri = Uri.parse("content://media/internal/images/media");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
위와 같이 코딩하고 실행하면,
Gallery의 두번째 화면 ( 폴더들어가서 폴더 내용 보여주는 것 같은 화면) 이 뜹니다.
그럼 어딘가에서 저 Uri 를 해석해서 Gallery 의 ImageGallery (두번째화면) 를 호출 할텐데요.
이것을 호출되려면,
ImageGallery 액티비티의 Intent-filter 같은곳에 명시를 해 두서야 호출이 될듯한데요.
AndroidManifest.xml 파일을 일부 입니다.
<activity android:name="ImageGallery" android:label="@string/gallery_label"
android:configChanges="orientation|keyboardHidden"
android:icon="@drawable/ic_launcher_gallery">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.dir/image" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.dir/video" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.GET_CONTENT" />
<category android:name="android.intent.category.OPENABLE" />
<data android:mimeType="vnd.android.cursor.dir/image" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.GET_CONTENT" />
<category android:name="android.intent.category.OPENABLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
<data android:mimeType="video/*" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.PICK" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
<data android:mimeType="video/*" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.PICK" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.dir/image" />
</intent-filter>
</activity>
도무지
저 intent-filter 하고 Uri 가 어떻게 맵핑이 되는지 모르겠네요.
Uri 에서 실제 호출되는 activity를 어떻게 알수 있을 까요?
감사합니다.
2009.12.09 10:10:01
답변 감사드립니다.
"content://media/internal/images/media" --> "vnd.android.cursor.dir/image" 라는 MimeTyp 으로 리턴
한다는 정보는 어디서 알 수 있는 것인지요?
Media Content Provider의 소스를 분석해야 하는 것인지요?
그리고, "vnd.android.cursor.dir/" 이 값도 어떻게 이값을 써야 하는지 알 수 있는 것이니요?
안드로이드 사이트 보면 NotePad 예제에서 "vnd.android.cursor.dir" 이 값을 사용하라고 되어 있기는 한데,
왜에 대한 설명이 없더라구요.
"vnd.android.cursor.dir" 이거 자체가 미리 정의된 상수라면 다른 것처럼 상수로 설명할텐데
그렇지도않고,
그냥 xml의 내용 값에 이거 써라 하는 식이라서요.
도무지, "content://media/internal/images/media" 이것이 왜 "vnd.android.cursor.dir/image" 으로 연결이 되는지에 대한 설명을 못 찾겠더라구요.
"content://media/internal/images/media" --> "vnd.android.cursor.dir/image" 라는 MimeTyp 으로 리턴
한다는 정보는 어디서 알 수 있는 것인지요?
Media Content Provider의 소스를 분석해야 하는 것인지요?
그리고, "vnd.android.cursor.dir/" 이 값도 어떻게 이값을 써야 하는지 알 수 있는 것이니요?
안드로이드 사이트 보면 NotePad 예제에서 "vnd.android.cursor.dir" 이 값을 사용하라고 되어 있기는 한데,
왜에 대한 설명이 없더라구요.
"vnd.android.cursor.dir" 이거 자체가 미리 정의된 상수라면 다른 것처럼 상수로 설명할텐데
그렇지도않고,
그냥 xml의 내용 값에 이거 써라 하는 식이라서요.
도무지, "content://media/internal/images/media" 이것이 왜 "vnd.android.cursor.dir/image" 으로 연결이 되는지에 대한 설명을 못 찾겠더라구요.
2009.12.09 10:20:33
Intent 의 설명에 대한 안드로이드 사이트 설명을 보면,
http://developer.android.com/reference/android/content/Intent.html
{ action=android.app.action.PICK data=content://com.google.provider.NotePad/notes }
이렇게 한 경우에 대산 설명이 있는데요.
그나마, NotePad 의 androidManifest.xml 에 보면,
이렇게 매핑하는 곳이라도 있는데요.
Camera App의 AndroidManifest.xml의 보면, 이런 구문이 전혀 없다는 것입니다.
content://media/internal/images/media
그럼 여기서 media 에 해당하는 부분에 대한 정의도 없고, 연결고리가 안 보입니다.
NotePad는 provider 와 activity를 다가지고 있기 때문이고,
Camera는 provider는 없기 때문이라고 보면, 연결고리가 빠진 것을 설명이 되는데요.
그럼, content://media/ 를 제공하는 것은 어느것이고,
이것이 어떤 mineType 등과 연결되는 지 문서로 나와 있는 것은 없는지요?
http://developer.android.com/reference/android/content/Intent.html
{ action=android.app.action.PICK data=content://com.google.provider.NotePad/notes }
이렇게 한 경우에 대산 설명이 있는데요.
그나마, NotePad 의 androidManifest.xml 에 보면,
<provider class=".NotePadProvider"
android:authorities="com.google.provider.NotePad" />
이렇게 매핑하는 곳이라도 있는데요.
Camera App의 AndroidManifest.xml의 보면, 이런 구문이 전혀 없다는 것입니다.
content://media/internal/images/media
그럼 여기서 media 에 해당하는 부분에 대한 정의도 없고, 연결고리가 안 보입니다.
NotePad는 provider 와 activity를 다가지고 있기 때문이고,
Camera는 provider는 없기 때문이라고 보면, 연결고리가 빠진 것을 설명이 되는데요.
그럼, content://media/ 를 제공하는 것은 어느것이고,
이것이 어떤 mineType 등과 연결되는 지 문서로 나와 있는 것은 없는지요?
2010.03.08 16:02:39
media 쪽 provider는 Camera Project에 있지 않고 MediaProvider Project에 따로 있습니다
http://android.git.kernel.org/?p=platform/packages/providers/MediaProvider.git;a=tree
여기의 MediaProvider의 uri가 "content://media" 로 정의되어 있고
mimetype은 getType() 메소드를 참고 하시면 되겠네요 ^^
오래전 글인데 걍.. 아는부분이라 답글 늦게나마 달아보아요~
http://android.git.kernel.org/?p=platform/packages/providers/MediaProvider.git;a=tree
여기의 MediaProvider의 uri가 "content://media" 로 정의되어 있고
mimetype은 getType() 메소드를 참고 하시면 되겠네요 ^^
오래전 글인데 걍.. 아는부분이라 답글 늦게나마 달아보아요~
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.dir/image" />
</intent-filter>