1. URI(Uniform Resource Identifier)
: 인텐트 자료에서 사용하는 URI는 자바에서 제공하는 URI 클래스와 안드로이드 내부에서 사용하는 URI 클래스로 제공한다.
즉, 자바에서 제공하는 URI 클래스는 일반적인 인터넷이나 웹 사이트를 지칭할 때 사용하며, URI 클래스는 안드로이드 내부 자료를 가리키거나 또는 콘텐트프로바이더와 같은 컴포넌트에서 사용하는 클래스이다.
[scheme:][//기관][경로][?쿼리][#fragment]
- 스킴(schema) : 프로토콜은 통신상에서 사용하는 용어이고 URI 에서는 'http', 'content', 그리고 'tel' 등과 같은 프로토콜을 스킴(Scheme)이라 부른다.
- 기관(Authority) : 기관은 다른 자료를 구분하기 위해 사용한다. content 스킴을 사용하는 경우 강제 규정은 아니지만 'com.android.example'와 같이 자바 고유 패키지 이름을 사용한다. 보다 일반적인 http는 인터넷 주소 규정에 따라 'www.google.com'으로 표기하게 된다.
- 경로(PATH) : 구체적인 자료의 위치를 나타낸다.
- 쿼리(Query) : 물음표('?') 뒤에 위치하여 추가적인 자료의 검색을 요구한다.
- 프레그먼트(fragment) : 자료를 분류한 색인이다.
안드로이드 액티비티매니저는 인텐트와 함께 자료 타입을 기준으로 전달할 컴포넌트를 선정하게 된다. 대부분 URI를 보고 추측할 수 있지만 가끔 URI를 보고 추측할 수 있지만 가끔 URI만으로 판단하기 어려운 경우, 추가적인 정보로 자료 타입(MIME 타입)을 참조한다.
- setData() 메서드는 URI만 사용해서 자료를 지정하며, getData()에 의해 읽혀지게 된다.
- setType()은 MIME 타입을 지정하며, getType()에 의해 읽는다.
- setDataAndType()은 URI와 MIME 타입 모두 다 지정할 수 있다.
아래는 안드로이드 매니페스트에서 사용하는 MIME 타입의 예이다. 하위타입 필드는 '*'와 같이 와일드카드를 사용할 수 있다.
<data android:scheme="file" />
<data android:scheme="content" />
<data android:mimeType="text/html" />
<data android:mimeType="text/plain" />
<data android:mimeType="audio/*" />
<data android:mimeType="video/*" />
<data android:mimeType="image/*" />
<data android:mimeType="application/vnd.android.package-archive" />
<data android:mimeType="text/xml" />
<data android:mimeType="application/zip" />
<data android:mimeType="image/tiff" />
<data android:mimeType="application/rtf" />
<data android:mimeType="application/excel" />
<data android:mimeType="application/msword" />
<data android:mimeType="video/mpeg" android:scheme="http" />
public class MainActivity extends Activity {
public static final String DEBUG_TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button goButton = (Button)findViewById(R.id.go);
goButton.setOnClickListener(mGoListener);
}
private final OnClickListener mGoListener = new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("audio/*");
try {
startActivity(Intent.createChooser(intent, "select music"));
} catch (ActivityNotFoundException e) {
// TODO: handle exception
Log.e(DEBUG_TAG, "ActivityNotFoundException !!!");
}
}
};
// 웹브라우저를 사용하여 웹사이트를 호출하는 방법
Intent result = null;
Uri cafeUri = Uri.parse("http://www.google.com");
result = new Intent(Intent.ACTION_VIEW, cafeUri);
// Google map 호출하는 방법
Uri mapUri = Uri.parse("geo:45.5,-5,5");
result = new Intent(Intent.ACTION_VIEW, mapUri);
// 전화 걸기 방법
Uri telUri = Uri.parse("tel:01066542126");
result = new Intent(Intent.ACTION_DIAL, telUri);
// 패키지 설치 작업
Uri packageUri = Uri.fromParts("package", "xxx", null);
result = new Intent(Intent.ACTION_PACKAGE_ADDED, packageUri);
result = new Intent(Intent.ACTION_DELETE, packageUri);
// 음악 호출
Uri playUri = Uri.parse("file://sdcard/download/everything.mp3");
result = new Intent(Intent.ACTION_VIEW, playUri);
// 이메일 전송
Uri emailUri = Uri.parse("maito:root@gmail.com");
result = new Intent(Intent.ACTION_SENDTO, emailUri);
[Android]액티비티와 태스크 (0) | 2013.09.09 |
---|---|
[Android] 인텐트 - 03 (0) | 2013.08.01 |
[Android] 인텐트 (0) | 2013.07.31 |
[Android]시간 포맷 클래스 (0) | 2013.07.13 |
[Android]자바 스타일 문자 (0) | 2013.04.21 |
댓글 영역