기존 액티비티로 하여금 아직 생각해보지 못한 기능의 이점을, 프로젝트를 수정하거나 다시 컴파일할 필요없이 새로운 applicaton component를 통해 취할 수 있도록 해주는 플러그인 모델을 제공한다.
이 방법은 "런타임 메뉴 추가"기능을 의미한다.
<activity android:name=".NostromoController">
<intent-filter android:label="궤도로부터의 핵 공격">
<action android:name="com.pad.nostromo.NUKE_FROM_ORBIT"/>
<data android:mimeType="vnd.moonbase.cursor.item/*/>
<category android:name="android.intent.category.ALTERNATIVE"/>
<category android:name="android.intent.category.SELECTED_ALTERNATIVE"/>
</activity>
위 action을 또 다른 액티비티의 메뉴에서 동적으로 사용할 수 있도록 만들 수 있다.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
Intent intent = new Intent();
intent.setData(MoonBaseProvider.CONTENT_URI);
intent.addCategory(Intent.CATEGORY_SELECTED_ALTERNATIVE);
int menuGroup = 0;
int menuItemId = 0;
int menuItemOrder = Menu.NONE;
ComponentName caller = getComponentName();
Intent[] specificIntents = null;
MenuItem[] outSpecificItems = null;
menu.addIntentOptions(menuGroup,
menuItemId,
menuItemOrder,
caller,
specificIntents,
intent,
Menu.FLAG_APPEND_TO_GROUP,
outSpecificItems);
return true;
}
** Broadcast Intent **
인텐트는 액티비티를 호출하는데에만 사용하는 것이 아니라 콤포넌트들간에 메시지를 전달하는데 사용될 수 있다. 어플리케이션내에 브로드캐스트수신자를 장착하여 특정 방송메세지에 귀기울이도록 할 수 있다.
// 방송하기
1. Intent 생성
Intent intent = new Intent(NEW_LIFEFORM_DELETED);
intent.putExtra("lifeformName", lifeformType);
intent.putExtra("longitude", currentLongitude);
intent.putExtra("latitude", currentLatitude);
2. send
sendBroadcast(intent);
// 방송듣기
1. BroadcastReceiver 생성
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Content context, Intent intent) {
// TODO :수신한 방송에 대해 처리를 한다.
}
}
2. AndroidManifest.xml에 수신자를 등록한다.
<receiver android:name=".LifeformDeletedBroadcastReceiver">
<intent-filter>
<action android:name="com.paad.action.NEW_LIFEFORM"/>
</intent-filter>
</receiver>
3. 또는 code상에서 수신자를 등록하거나 해재할 수 있다. 이 처럼 동적으로 액티비티가 활성화되어 있을경우에만 수신할 수 있도록 하는 제어가 가능하다.
//등록하기
IntentFilter filter = new IntentFilter(NEW_LIFEFORM_DETECTED);
LifeformDetectedBroadcastReceiver r = new LifeformDetectedBroadcastReceiver();
registerReceiver(r, filter);
// 해재하기
unregisterReceiver( r );
안드로이드 시스템에서 정의되어 있는 방송의 종류는 아래와 같다.
ACTION_BOOT_COMPLETED
ACTION_CAMERA_BUTTON
ACTION_DATE_CHANGED, ACTION_TIME_CHANGED
ACTION_GTALK_SERVICE_CONNECTED, ACTION_GTALK_SERVICE_DISCONNECTED
ACTION_MEDIA_BUTTON
ACTION_MEDIA_EJECT
ACTION_MEDIA_MOUNTED, ACTION_MEDIA_UNMOUNTED
ACTION_SCREEN_OFF, ACTION_SCREEN_ON
ACTION_TIMZONE_CHANGED
// ... http://developer.android.com/reference/android/content/Intent.html
이 방법은 "런타임 메뉴 추가"기능을 의미한다.
<activity android:name=".NostromoController">
<intent-filter android:label="궤도로부터의 핵 공격">
<action android:name="com.pad.nostromo.NUKE_FROM_ORBIT"/>
<data android:mimeType="vnd.moonbase.cursor.item/*/>
<category android:name="android.intent.category.ALTERNATIVE"/>
<category android:name="android.intent.category.SELECTED_ALTERNATIVE"/>
</activity>
위 action을 또 다른 액티비티의 메뉴에서 동적으로 사용할 수 있도록 만들 수 있다.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
Intent intent = new Intent();
intent.setData(MoonBaseProvider.CONTENT_URI);
intent.addCategory(Intent.CATEGORY_SELECTED_ALTERNATIVE);
int menuGroup = 0;
int menuItemId = 0;
int menuItemOrder = Menu.NONE;
ComponentName caller = getComponentName();
Intent[] specificIntents = null;
MenuItem[] outSpecificItems = null;
menu.addIntentOptions(menuGroup,
menuItemId,
menuItemOrder,
caller,
specificIntents,
intent,
Menu.FLAG_APPEND_TO_GROUP,
outSpecificItems);
return true;
}
** Broadcast Intent **
인텐트는 액티비티를 호출하는데에만 사용하는 것이 아니라 콤포넌트들간에 메시지를 전달하는데 사용될 수 있다. 어플리케이션내에 브로드캐스트수신자를 장착하여 특정 방송메세지에 귀기울이도록 할 수 있다.
// 방송하기
1. Intent 생성
Intent intent = new Intent(NEW_LIFEFORM_DELETED);
intent.putExtra("lifeformName", lifeformType);
intent.putExtra("longitude", currentLongitude);
intent.putExtra("latitude", currentLatitude);
2. send
sendBroadcast(intent);
// 방송듣기
1. BroadcastReceiver 생성
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Content context, Intent intent) {
// TODO :수신한 방송에 대해 처리를 한다.
}
}
2. AndroidManifest.xml에 수신자를 등록한다.
<receiver android:name=".LifeformDeletedBroadcastReceiver">
<intent-filter>
<action android:name="com.paad.action.NEW_LIFEFORM"/>
</intent-filter>
</receiver>
3. 또는 code상에서 수신자를 등록하거나 해재할 수 있다. 이 처럼 동적으로 액티비티가 활성화되어 있을경우에만 수신할 수 있도록 하는 제어가 가능하다.
//등록하기
IntentFilter filter = new IntentFilter(NEW_LIFEFORM_DETECTED);
LifeformDetectedBroadcastReceiver r = new LifeformDetectedBroadcastReceiver();
registerReceiver(r, filter);
// 해재하기
unregisterReceiver( r );
안드로이드 시스템에서 정의되어 있는 방송의 종류는 아래와 같다.
ACTION_BOOT_COMPLETED
ACTION_CAMERA_BUTTON
ACTION_DATE_CHANGED, ACTION_TIME_CHANGED
ACTION_GTALK_SERVICE_CONNECTED, ACTION_GTALK_SERVICE_DISCONNECTED
ACTION_MEDIA_BUTTON
ACTION_MEDIA_EJECT
ACTION_MEDIA_MOUNTED, ACTION_MEDIA_UNMOUNTED
ACTION_SCREEN_OFF, ACTION_SCREEN_ON
ACTION_TIMZONE_CHANGED
// ... http://developer.android.com/reference/android/content/Intent.html