안드로이드 개발 22―방송 수신자 BroadcastReceiver의 원리와 등록
어떤 사건이 발생할 때(예를 들어 문자가 오거나 전화가 오면)android 운영체제는 이 사건을 모든 등록된 방송 수신자에게 방송하고 이 사건을 처리하는 방송 수신자가 처리해야 한다.사실 이것이 일상생활의 방송이다.한 뉴스가 발생한 후에 방송국은 이 뉴스를 라디오를 켜는 사람에게 방송할 것이다. 이 뉴스에 관심이 있는 사람은 관심을 가지고 필기를 할 수도 있다.뉴스는 사건이고, 방송국은android시스템이며, 라디오를 켜는 사람은 방송 수신자이며, 관심 있는 사람은 이 사건을 처리해야 하는 방송 수신자이며, 필기를 하면 이 사건에 대한 조작이다.
2. 방송의 분류―일반방송과 질서방송
① 일반 방송: 완전히 비동기적이며 논리적으로 모든 방송 수신자에게 수신될 수 있다.장점은 효율이 비교적 높다는 것이다.단점은 수신자가 처리 결과를 다음 수신자에게 전달할 수 없고 방송 intent의 전파를 중지할 수 없다는 것이다.
② 질서정연한 방송: 수신자의 우선순위에 따라 수신자 중에서 한 번에 전파한다.예를 들어 세 개의 방송 수신자 A, B, C가 있는데 우선순위는 A>B>C이다.그럼 이 소식은 A에게 먼저 전하고 B에게 전하고 마지막에 C에게 전달한다.모든 수신자는 방송을 중지할 권리가 있다. 예를 들어 B가 방송을 중지하면 C는 수신할 수 없다.이외에 A는 방송을 받은 후 결과 대상을 조작할 수 있고, 방송이 B에게 전달될 때 B는 결과 대상에서 A가 저장한 데이터를 얻을 수 있다.만약 시스템이 문자를 받으면 보내는 방송은 질서정연한 방송이다.
3. 방송 수신자를 등록하는 두 가지 방식
① 안드로이드 매니페스트에서.xml에 등록
프로필에 등록된 수신자의 특징은 프로그램이 꺼졌음에도 불구하고 이 수신자는 흥미로운 방송을 받아들일 수 있다는 것이다. 예를 들어 휴대전화 배터리 전력의 방송 수신자는 어떤 프로그램을 열 필요가 없다.아래의 예는 1, 2 방송 수신자가 전화를 건 방송을 받는다.
android:label="@string/app_name">
/**
publicclass MainActivity extends Activity
publicvoid onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
Intent intent = new Intent();
this.sendBroadcast(intent);
}
/**
* @author 서월
*/
{
{
}
@Override
{
}
}
/**
publicclass BroadcastReceiver2 extends android.content.BroadcastReceiver
public BroadcastReceiver2()
Log.i("xy_Receiver", "construtor2");
publicvoid onReceive(Context context, Intent intent)
Log.i("xy_Receiver", "onReceive2");
* 브로드캐스트 수신자 3
* @author 서월
*/
{
public BroadcastReceiver3()
Log.i("xy_Receiver", "construtor3");
publicvoid onReceive(Context context, Intent intent)
Log.i("xy_Receiver", "onReceive3");
②Activity에 등록
Activity에서 귀속 수신자는 이 프로그램에 따라야 하거나 BroadcastReceiver가 UI를 업데이트하는 데 사용되어야 합니다. 프로그램이 닫힐 때 수신자가 실행될 필요가 없기 때문에 AndroidManifest가 필요하지 않습니다.xml에 등록하고 Activity에 등록할 수 있습니다.
/**
publicclass MainActivity extends Activity
private BroadcastReceiver receiver;
publicvoid onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
}
/**
*/
{
intent.setAction("android.intent.action.CALL");
}
publicvoid bindReceiver(View v)
receiver = new BroadcastReceiver();
intentFilter.addAction(CALL_ACTION);
}
publicvoid unBindReceiver(View v)
this.unregisterReceiver(receiver);
}
publicclass BroadcastReceiver extends android.content.BroadcastReceiver
publicvoid onReceive(Context context, Intent intent)
Log.i("xy", "receiver");
본 논문 은 'IT 서 뚱보 의 칼럼' 블로그 에서 나온 것 이니, 반드시 이 출처 를 보존해 주십시오http://woshixy.blog.51cto.com/5637578/1097197
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.