2010. 11. 25.

[Android]인텐트 - Intent

Intent
- 애플리케이션 내부와 애플리케이션 간의 메시지 전달 메커니즘

1. 명시적 사용 : 실행할 클래스를 직접 지정하는 방식 (하나의 어플리케이션 내부에서 사용)

Intent intent = new Intent(ThisActivity.this, RunActivity.class);
startActivity(intent);
//실행한 Activity로부터 결과값을 받아야 할 경우
//startActivityForResult(intent);


2. 암시적 사용 : 특정 데이터에 대해 수행될 액션을 요청하는 방식

Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:555-1111"));
startActivity(intent);


주의 : 하위 Activity도 반드시 AndroidManifest.xml에 등록 되어야 함

3. 하위 Activity로 부터 결과값 전달 받기
- 하위 Activity를 구분하기 위해 고유값(RESULT_NEWACTIVITY) 전달

private static final int RESULT_NEWACTIVITY = 1001;
Intent intent = new Intent(this, NewActivity.class);
startActivityForResult(intent, RESULT_NEWACTIVITY);


- NewActivity에서는 Result값을 돌려주어야 함

public void onStop()
{
setResult(RESULT_OK);
finish();
//혹은 추가적인 정보를 넘겨주기 위해 Intent를 같이 넘겨줄 수 있음
//Intent result = new Intent();
//result.putExtra("Select Account", "1");
//setResult(RESULT_CANCELED, result);
//finish();
}


- 하위Activity가 종료되면 호출한 Activity의 onActivityResult가 호출됨 여기서 호출한 결과를 처리

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
switch(requestCode)
{
case RESULT_NEWACTIVITY:
break;
}
}



Intent Filter
- 어플리케이션이 서비스 할 요청을 정의하기 위해 사용
- Action type, mimetype, 스킴(http, mailto, tel 등), 사용자 정의 타입등을 등록할 수 있음


인텐트를 이용한 이벤트 방송

Intent intent = new Intent(NEW_MINIST_INTENT);
intent.putExtra("ministName", strName);
intent.putExtra("longitude", currentLongitude);
intent.putExtra("latitude", currentlatitude);
sendBroadcast(intent);


브로드캐스트리시버

public class MinistBroadcastReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
//수신된 인텐트 처리
}
}

- onReceiver는 무조건 5초이내에 끝내야 함, 그렇지 않으면 ANR 발생
- 종료된 상태에서도 일치하는 인텐트가 방송되면 실행됨 => 리소스 관리에 도움됨
- 화면에 보이지 않거나 종료될 때 receiver를 등록해제 해 주는것이 바람직함 -> 메모리관리
- AndroidManifest.xml 에 등록





- 코드로 등록

IntentFilter filter = new IntentFilter(NEW_MINIST_INTENT);
실행될_CLASS_name classX = new 실행될_CLASS_name();
registerReceiver(classX, filter);
//등록 해제 시
//unregisterReceiver(receiver);

[다자녀할인] 2자녀 이상 모든 공항 주차장 50% 할인받기 (둘 중 한명은 15세 이하)

다자녀 기준이 2명으로 완화되면서 자녀가 2명만 되어도 공영주차장 50%(지역에 따라 30%인 곳 도 있음) 할인이 가능하고, 전국의 공항주차장도 50% 할인이 가능하다. "다둥이카드" 나 "경기 I Plus 카드"...