Android 개발 의 Intent 와 BroadcastReceiver
새로운 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)。
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.