본문 바로가기
Programming/Android Java

다른 앱들이 여러분의 액티버티를 시작하도록 허용하기

by 개Foot/Dog발?! 2014. 8. 31.

URL : http://codeflow.co.kr/question/847/


.....


Handle the Intent in Your Activity

액티버티에서 어떤 액션을 취할지 결정할 때, 액티버티를 시작한 Intent 의 정보를 이용할 수 있다.


액티버티가 시작할때, getIntent() 함수를 호출하여, 액티버티 자신을 실행시킨 Intent 을 얻어올 수 있다. 액티버티 lifecycle 어디에서나 이 함수를 호출할 수 있지만, onCreate() 이나 onStart() 에서 일찍 호출하는 것이 좋다


@Override

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);


    setContentView(R.layout.main);


    // Get the intent that started this activity

    Intent intent = getIntent();

    Uri data = intent.getData();


    // Figure out what to do based on the intent type

    if (intent.getType().indexOf("image/") != -1) {

        // Handle intents with image data ...

    } else if (intent.getType().equals("text/plain")) {

        // Handle intents with text ...

    }

} 


Return a Result

여러분의 액티버티를 시작한 액티버티로 결과를 돌려주려면, setResult() 함수를 호출하여 결과 코드와 결과 Intent 를 설정한다. 여러분의 작업이 끝날 때, 유저는 원래 액티버티로 돌아가야 할때, finish() 를 호출하여 여러분 액티버티를 종료시킨다.


// 데이터를 돌려주기 위해 인텐트를 만든다

Intent result = new Intent("com.example.RESULT_ACTION", Uri.parse("content://result_uri");

setResult(Activity.RESULT_OK, result);

finish(); 


결과에는 항상 결과 코드를 설정해야 한다. 일반적으로 RESULT_OK 이나 RESULT_CANCELED 둘 중의 하나일 것이다. 그리고 추가로 필요한 데이터를 Intent 을 이용하여 전달할 수 있다.


Note: 결과는 기본적으로 RESULT_CANCELED 값을 가지게 된다. 유저가 작업을 완료하여 여러분이 결과를 설정하기 전에, _Back_ 버튼을 클릭하면, 원래 액티버티는 RESULT_CANCELED 결과를 받게 된다.


결과 값으로 integer 하나를 보내야 한다면, result code 를 이용할 수 있다. 이 integer 를 보내기 위해 result code 를 사용한다면, Intent 를 포함시킬 필요 없이, setResult() 에 result code 만을 전달해도 된


setResult(RESULT_COLOR_RED);


finish(); 


가능한 결과가 몇가지 없을 때 이 방법을 사용하며, 결과 code 는 (0 보다 큰) 앱에서 지정한 정수 값이 된다. 여러분 앱의 액티버티에서 결과를 리턴할 때 이방법을 유용하게 사용할 수 있다. 왜냐하면 결과 code 를 결정하기 위해서 앱에서 정한 퍼블릭 상수 값을 이용할 수 있기 때문이다.


Note: 액티버티가 startActivity() 로 시작되었는지 startActivityForResult() 로 시작되었는지 확인할 필요는 없다. 여러분의 액티버티를 시작한 intent 가 결과를 받기를 기대할지도 모른다면, setResult() 를 호출한다. 여러분 앱을 호출한 액티버티가 startActivityForResult() 를 사용했다면, setResult() 로 설정한 결과를 시스템이 전달해 줄 것이다; 그렇지 않으면 결과가 무시된다.