Android 개발 의 Intent 와 BroadcastReceiver

5266 단어 androidintent
Broadcast Receiver(방송 수신 자)는 Broadcast Intent 를 감청 하 는 데 사용 할 수 있다.Broadcast Receiver 가 방송 을 받 을 수 있 도록 하려 면 코드 를 사용 할 수도 있 고 프로그램의 manifest 파일 에 등록 할 수도 있 습 니 다.아무리 등록 하 더 라 도 어떤 Intent 와 데 이 터 를 감청 해 야 하 는 지 를 정 하기 위해 Intent Filter 를 사용 해 야 합 니 다.
새로운 Broadcast Receiver 를 만 들 려 면 BroadcastReceiver 클래스 를 확장 하고 onReceive 이벤트 처리 방법 을 다시 써 야 합 니 다.
public class MyReceiver extends BroadcastReceiver {

  private static final String TAG = "My Receiver";
  public static final String ACTION = "com.paad.intents.MyReceiverAction";

  @Override
  public void onReceive(Context context, Intent intent) {
    Log.d(TAG, "My Receiver Received Broadcast");
  }

}

라디오 를 등록 할 때 Intent Filter 와 일치 하 는 Broadcast Intent 를 받 으 면 onReceive 방법 이 실 행 됩 니 다.onReceive 처리 프로그램 은 5 초 안에 완료 해 야 합 니 다.그렇지 않 으 면 Force Close 가 표 시 됩 니 다.즉,onReceive 에서 이벤트 의 처리 시간 이 5 초 동안 걸 리 지 않 는 다 는 것 이다.일반적으로 Broadcast Receiver 는 콘 텐 츠 업데이트,Service 시작,Activity UI 업데이트 또는 Notification Manager 를 사용 하여 사용자 에 게 알 립 니 다.5 초 간 의 집행 제한 은 주요 업무 처리 가 도랑 에 빠 지지 않도록 보장 하 는 동시에 Broadcast Receiver 가 직접 완성 해 서 는 안 된다.
이 코드 는 Broadcast Receiver 를 어떻게 실현 하 는 지 보 여 줍 니 다.Broadcast Intent 에서 데이터 와 몇 개의 extra 를 추출 하고 이 를 사용 하여 새로운 Activity 를 시작 합 니 다.다음 부분 에 서 는 코드 와 응용 프로그램의 manifest 에 등록 하 는 방법 을 배 울 것 입 니 다.
public class LifeformDetectedReceiver 
  extends BroadcastReceiver {

  public final static String EXTRA_LIFEFORM_NAME 
    = "EXTRA_LIFEFORM_NAME";
  public final static String EXTRA_LATITUDE = "EXTRA_LATITUDE";
  public final static String EXTRA_LONGITUDE = "EXTRA_LONGITUDE";

  public static final String 
    ACTION_BURN = "com.paad.alien.action.BURN_IT_WITH_FIRE";

  public static final String 
    NEW_LIFEFORM = "com.paad.alien.action.NEW_LIFEFORM";

  @Override
  public void onReceive(Context context, Intent intent) {
    // Get the lifeform details from the intent.
    Uri data = intent.getData();
    String type = intent.getStringExtra(EXTRA_LIFEFORM_NAME);
    double lat = intent.getDoubleExtra(EXTRA_LATITUDE, 0);
    double lng = intent.getDoubleExtra(EXTRA_LONGITUDE, 0);
    Location loc = new Location("gps");
    loc.setLatitude(lat);
    loc.setLongitude(lng);
    if (type.equals("facehugger")) {
      Intent startIntent = new Intent(ACTION_BURN, data);
      startIntent.putExtra(EXTRA_LATITUDE, lat);
      startIntent.putExtra(EXTRA_LONGITUDE, lng);

      context.startService(startIntent);
    }
  }
}

코드 에 BroadcastReceiver 등록 하기
특정 Activity 의 UI 에 영향 을 주 는 Broadcast Receiver 는 보통 코드 에 등 록 됩 니 다.코드 에 등 록 된 수신 기 는 프로그램 구성 요소 가 실 행 될 때 Broadcast Intent 에 응답 합 니 다.
다음은 IntentFilter 를 이용 하여 BroadcastReceiver 를 등록 하고 취소 하 는 사례 입 니 다.
/**
   * Registering and unregistering a Broadcast Receiver in code 
   */
  private IntentFilter filter = 
      new IntentFilter(LifeformDetectedReceiver.NEW_LIFEFORM);

  private LifeformDetectedReceiver receiver = 
    new LifeformDetectedReceiver();

  @Override
  public synchronized void onResume() {
    super.onResume();

    // Register the broadcast receiver.
    registerReceiver(receiver, filter); 
  }

  @Override
  public synchronized void onPause() {
    // Unregister the receiver
    unregisterReceiver(receiver);  

    super.onPause();
  }

프로그램의 manifest 설정 파일 에 Broadcast Receiver 를 등록 합 니 다.
코드 에 BroadcastReceiver 를 등록 할 수 있 는 것 외 에 도 manifest 설정 파일 에 등록 할 수 있 습 니 다.
실례:
<receiver 
      android:name=".MyReceiver">
      <intent-filter>
        <action android:name="com.paad.intents.MyReceiverAction" />
      </intent-filter>
    </receiver>

이 방식 은 정적 등록 방식 으로 등 록 된 BroadcastReceiver 는 항상 활동 하 며 프로그램 이 종료 되 거나 시작 되 지 않 았 을 때 도 Broadcast Intent 를 받 을 수 있 습 니 다.
방송 질서 있 는 Intent
Broadcast Receiver 가 Intent 를 받 는 순서 가 매우 중요 할 때,특히 Broadcast Receiver 가 미래의 수신 기 에 영향 을 줄 수 있 는 Broadcast Intent 가 필요 할 때 sendOrdered Broadcast 방법 을 사용 할 수 있 습 니 다.다음 과 같 습 니 다.
String permission = "com.xxx.MY_BROADCAST_PERMISSION";
sendOrderedBroadcast(intent,permission);
이 방법 을 사용 하면 Intent 는 우선 순위 에 따라 적당 한 권한(권한 이 지정 되 었 을 때)을 가 진 등 록 된 BroadcastReceiver 에 전 달 됩 니 다.Broadcast Receiver 의 Intent Filter manifest 노드 에서 android:priority 속성 을 사용 하여 권한 을 지정 할 수 있 습 니 다.값 이 클 수록 우선 순위 가 높 습 니 다.
<receiver android:name=".MyReceiver" >
            <intent-filter android:priority="100">
                <action android:name="com.paad.intents.MyReceiverAction" />
            </intent-filter>
 </receiver>

라디오 Sticky Intent 점성 방송
Sticky Intent 는 Broadcast Receiver 의 유용 한 변형 으로 마지막 방송의 값 을 저장 할 수 있 으 며,새로운 Broadcast Receiver 가 이 방송 을 받 는 것 으로 등록 되 었 을 때 이 값 을 Intent 로 되 돌려 줍 니 다.
registerReceiver 를 호출 하여 Sticky Broadcast Intent 와 일치 하 는 Intent Filter 를 지정 할 때,반환 값 은 배터리 전량 변화 와 같은 마지막 Intent 방송 이 될 것 입 니 다.
점성 방송 보 내기:sendSticky Broadcast(intent).
점성 방송 을 삭제 하면 removeSticky Broadcast 를 호출 하고 삭제 할 Sticky Intent 를 전송 할 수 있 습 니 다.
removeStickyBroadcast(intent)。

좋은 웹페이지 즐겨찾기