Android/App개발2009. 7. 26. 19:19
기존 액티비티로 하여금 아직 생각해보지 못한 기능의 이점을, 프로젝트를 수정하거나 다시 컴파일할 필요없이 새로운 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


Posted by 삼스

댓글을 달아 주세요

  1. 니가 눈물 흘릴 필요없어, 널 이렇게 하게 할수 있었던 사람이라면 널 울리질 않았을거야.
    Topics related articles:


    http://solefaith.tistory.com/m/post/view/id/116 新建文章 9

    http://emandual.tistory.com/?_best_tistory=best_blogger1 新建文章 7

    http://sptindie.tistory.com/110 新建文章 3

    http://yeoshim.tistory.com/archive/20120823 新建文章 9

    2013.05.15 18:35 [ ADDR : EDIT/ DEL : REPLY ]
  2. 태양이 바다에 미광을 비추면,나는 너를 생각한다.

    2013.07.14 06:02 [ ADDR : EDIT/ DEL : REPLY ]
  3. 태양이 바다에 미광을 비추면,나는 너를 생각한다.

    2013.07.15 02:44 [ ADDR : EDIT/ DEL : REPLY ]