안드로이드 개발 질문/답변
(글 수 45,052)
커니님의
http://androidhuman.tistory.com/ 사이트에서 열심히 정독을 해봤는데
암시적인 인테트는 어떻게 사용하는지 이해를 못하겠내요
우선 명시적인건 쉽게 호출을 하고 있습니다.
궁금한건 제가 만든 Activity를 암시적으로 호출을 해볼려고 합니다.
AndoridMainfest.xml에 아래와 같이 선언을 했습니다
<activity android:name=".CustomManager"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<action android:name="com.sale.CustomLayout" /> <!-- 이부분이 맞는지 모르겠내요 -->
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.item/vnd.com.sale.CustomLayout" /> <!--이부분도 모르겠습니다.-->
</intent-filter>
</activity>
java Source
Uri uri = Uri.parse("com.sale.CustomLayout");
Intent intent = new Intent(Intent.ACTION_VIEW,uri); intent.setData(Uri.parse("vnd.android.cursor.item/vnd.com.sale.CustomLayout"));
startActivityForResult(intent, 2);
어디를 수정을 해주어야 하는지 수정좀 부탁드립니다.
http://androidhuman.tistory.com/ 사이트에서 열심히 정독을 해봤는데
암시적인 인테트는 어떻게 사용하는지 이해를 못하겠내요
우선 명시적인건 쉽게 호출을 하고 있습니다.
궁금한건 제가 만든 Activity를 암시적으로 호출을 해볼려고 합니다.
AndoridMainfest.xml에 아래와 같이 선언을 했습니다
<activity android:name=".CustomManager"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<action android:name="com.sale.CustomLayout" /> <!-- 이부분이 맞는지 모르겠내요 -->
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.item/vnd.com.sale.CustomLayout" /> <!--이부분도 모르겠습니다.-->
</intent-filter>
</activity>
java Source
Uri uri = Uri.parse("com.sale.CustomLayout");
Intent intent = new Intent(Intent.ACTION_VIEW,uri); intent.setData(Uri.parse("vnd.android.cursor.item/vnd.com.sale.CustomLayout"));
startActivityForResult(intent, 2);
어디를 수정을 해주어야 하는지 수정좀 부탁드립니다.
2010.02.16 11:01:02
java 소스단에서 어떻게 호출을 해야 하는지 궁금합니다.
intent = new Intent(Intent.ACTION_VIEW,Uri.parse("com.sale.CustomLayout"));
이렇게 하니까 안먹내요
intent = new Intent(Intent.ACTION_VIEW,Uri.parse("com.sale.CustomLayout"));
이렇게 하니까 안먹내요
2010.02.16 11:41:33
데이터를 넣어주는 것 자체가 틀렸네요.
mimeType과 데이터 URI는 다른 겁니다.
setData에는 URI를 넣어주어야 하구요.
위와 같이 Type로 지정할 때는 setType 메소드를 사용해야 합니다.
그리고 액션이 왜 두개를 선언하셨는지요??
제가 보기엔 ACTION_VIEW 액션과 데이터 부분만 있어도 될 듯 하네요.
그리고... type를 저렇게 임의의 타입을 사용하려면 이미 기존에 컨텐트 프로바이더를 만드셔서 등록을 해 놓은 상태여야 합니다.
뭐, setType를 사용하면 호출은 될는지 모르겠네요. 하지만 일반적으로 사용하는 방법은 아닙니다.
단순히 암시적 인텐트를 사용하여 액티비티 호출하는 것을 테스트하는 것이라면 액션만 지정해서 테스트하는걸 추천합니다.
[인텐트 필터]
<intent-filter>
<action android:name="com.androidhuman.action.TEST_ACTION" />
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
[액티비티 호출부]
Intent intent = new Intent("com.androidhuman.action.TEST_ACTION");
startActivity(intent);
2010.02.16 14:06:01
네 감사합니다.
암시적 호출이 되어지는군여...
그런데
------------------------------------------------------------------------
암시적 호출이 되어지는군여...
그런데
------------------------------------------------------------------------
mimeType과 데이터 URI는 다른 겁니다.
setData에는 URI를 넣어주어야 하구요.
위
와 같이 Type로 지정할 때는 setType 메소드를 사용해야 합니다.
------------------------------------------------------------------------
무슨 말씀인지 이해를 못했습니다.
다시 한번 설명 부탁드립니다. 꾸 ~~ 벅
------------------------------------------------------------------------
무슨 말씀인지 이해를 못했습니다.
다시 한번 설명 부탁드립니다. 꾸 ~~ 벅
2010.02.16 21:41:37
data는 컴포넌트 호출할 때 부가적으로 필요한 정보를 보낼때 사용합니다.
예를 들면 ACTION_VIEW 액션을 사용한다면, "어떤 것"을 볼 지에 대한 추가정보가 있어야겠지요.
이 때 data에 사진의 주소, 동영상의 주소, 웹 페이지의 주소 등...을 넣어주는겁니다.
data는 주로 어떤 데이터를 "조회"할 때 많이 사용되구요.
data와 비슷하게 type(MIMEType)도 부가정보로 많이 사용되는데,
이건 데이터의 "유형"을 의미합니다. jpg 파일, avi파일 등등....
MIME Type에 대한 건 인터넷 찾아보시면 더 자세히 알 수 있으실테고,
일반적으로 image/jpeg, video/avi 이런게 MIME Type이죠.
안드로이드에서는 컨텐트 프로바이더에서도 이러한 MIMEType을 지원하고,
MIMEType을 지정할 때 다른 것들과 중복되는 것을 방지하기 위해 자바 패키지 명명법을 따라 MIMEType 이름을 짓습니다.
일반적으로 vnd.android.cursor.item(혹은 dir)/vnd.androidhuman.myType 이런 식이 되겠죠.
이렇게 type을 인텐트에 지정하여 사용하는건 주로 해당 유형의 데이터를 가져와야 할 떄 사용합니다.
예를 들면 사진을 가져오는 액티비티를 호출하고 싶을 땐
Intent intent = new Intent(Intent.ACTION_PICK); (혹은 ACTION_GET_CONTENT)
intent.setType("image/*");
startActivity(intent);
이렇게 하면 일반적으로 갤러리가 실행되면서 사진을 선택할 수 있고, 선택한 사진의 주소(URI)는 호출한 액티비티의 onActivityResult()에서 받아올 수 있죠.
이 부분은 개발자 문서 쪽을 더 읽어보시는게 도움이 더 되지 않을까 싶네요.
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.item/vnd.com.sale.CustomLayout" />
</intent-filter>
<intent-filter>
<action android:name="com.sale.CustomLayout" />
</intent-filter>
이런식을 바꿀수 있구요.
mimeType 과 uri는 다른 것입니다.