Android > 인텐트(Intent) - 기본 기능들
등록일 : 2017-07-05 11:28
조회수 : 93,999
1. URI(Uniform Resource Identifier)
: 인텐트 자료에서 사용하는 URI는 자바에서 제공하는 URI 클래스와 안드로이드 내부에서 사용하는 URI 클래스로 제공한다.
즉, 자바에서 제공하는 URI 클래스는 일반적인 인터넷이나 웹 사이트를 지칭할 때 사용하며, URI 클래스는 안드로이드 내부 자료를
가리키거나 또는 콘텐트프로바이더와 같은 컴포넌트에서 사용하는 클래스이다.
2. [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);