한 액티비티에서 다른 액티비티를 실행하려면 액티비티 실행을 요청하는 도구가 필요하다. 안드로이드는 브로드캐스팅과 인텐트(Intent)를 제공하는데, 브로드캐스팅은 모든 객체에게 뿌리는 방송과 같은 것이며 인텐트는 이 방송에 실려 전달되는 메시지에 해당된다.
인텐트는 명시적 인텐트와 묵시적 인텐트가 있다.
실행할 액티비티를 직접적으로 정확하게 가리키는 것을 명시적 인텐트라고 하고,
필요한 기능만 설명한 채 직접적으로 액티비티를 가리키지 않는 것을 암시적 인텐트라고 한다.
명시적 인텐트가 가장 빈번히 사용되는 경우는 하나의 패키지 안의 한 액티비티가 또 다른 액티비티를 호출할 때이다. 이것이 가능한 이유는 너무나도 당연한 일이지만 호출하는 쪽에서 호출할 액티비티를 임포트할 수 있기때문이다.
명시적 인텐트를 사용하는 법은 어렵지 않다. 현재 액티비티의 컨텍스트와 실행할 액티비티 클래스를 인텐트 생성자의 인자로 사용하여 인텐트 인스턴스 하나를 생성한 후에 startActivy() 메서드에 생성한 인텐트를 인자로 넘겨서 호출하면 된다.
... (생략)... Intent intent = new Intent(FirstActivity.this, SecondActivity.class); startActivity(intent); ... (생략)... |
startActivityForResult() 메서드를 사용하면 된다.
... (생략)... Intent intent = new Intent(FirstActivity.this, SecondActivity.class); startActivityForResult(intent, 0); ... (생략)... |
@Override public void onActivityResult(int requestCode, int resultCode, Intent data){ // 실행한 액티비티가 종료된 후에 필요한 코드를 이곳에 추가합니다. } |
암시적 인텐트는 앞에서 설명한 것처럼 실행 주제를 정확하게 서술하지 않고 자신의 목적만으로 적합한 액티비티를 실행하는 것이다. 암시적 인텐트를 사용하기 위해서는 두 가지가 필요하다. 하나는 실행하고자 하는 기능을 나타내는 액션(action)이며, 다른 하나는 액션과 함께 액티비티에 넘겨줄 데이터(data)입니다. 액션은 String 객체로 표현되며 데이터는 Uri 클래스의 인스턴스 이다. 예를 들어 가장 많이 사용되는 전화의 경우 액션으로 Intent.ACTION_CALL을, 데이터로 Uri.parse("tel:01012345678") 과 같은 Uri 값을 사용한다. 이를 코드로 구현하면 아래와 같다.
...(생략)... /* 전화를 걸기 위한 인텐트를 생성합니다. */ Intent intent = new Intent(Intent.ACTION_CALL); /* 전화를 Uri 인스턴스로 변환합니다. */ intent.setData(Uri.parse("tel:01012345678")); /* 생성된 인텐트를 사용해 액티비티를 실행합니다. */ startActivity(intent); ...(생략)... |
구글의 개발자 사이트의 http://developer.android.com/guide/appendix/g-app-intents.html 로 들어가서 Intents List : Invoking Google Applications on Android Devices(인텐트 목록: 안드로이드 기기에서 구글의 애플리케이션 호출하기)를 읽어보면 액션과 필요한 데이터를 확인할 수 있다.
Posted by 홍반장