브로드캐스트 수신기 - Broadcast Receiver(1)

3884 단어
방송 수신기는android 응용 프로그램의 4대 구성 요소 중의 하나이다.하지만 저는 쉽게 이해할 수 있습니다. 마치 현장에서 이벤트 추첨을 하는 것처럼 추첨을 하려면 먼저 첫 번째 단계에서 추첨자에게 숫자 번호(등록 수신기에 해당)를 주고 같은 번호를 종이 상자에 넣어야 합니다. 추첨을 하기 전에 누구도 어떤 번호를 뽑을 수 없습니다.그 다음에 사회자가 첫 번째 번호, 두 번째, 세 번째...다음 사람은 반드시 사회자가 뽑은 번호와 같아야 당첨될 수 있습니다. 같은 번호를 뽑는 것이 중점입니다. 번호에 맞추어 자리에 앉으세요. 당첨된 후에 당첨자가 이 상품을 마음대로 처리합니다.이것은 내가android시스템에 방송을 보내는 것과 같이 이 정보에 대응하는 수신기만 수신할 수 있다. 예를 들어 문자 메시지를 수신하려면 반드시 방송 동작을 지정해야만 수신할 수 있고 번호에 맞게 자리에 앉을 수 있다. 그리고 onReceive라는 방법에서 자신이 하고 싶은 일을 실현할 수 있다.
제가 설명을 잘 못해서 못 봤을 수도 있어요. 용서해 주세요. 본인의 표현 능력이 별로 좋지 않아요.
다음은 문자 차단의 예를 쓰겠습니다.
1단계: 브로드캐스트 수신기 등록
등록 수신기는 두 가지 방법이 있는데, 하나는 manifest에 있다.xml 파일에 등록하고 다른 하나는 자바 코드로 등록합니다.
manfest에 등록
    <receiver 
            android:name=".TestRecevier">
            <intent-filter>
                <action android:name="android.intent.action.EDIT"/>
                </intent-filter>
        </receiver>
package mobile.android.register.receiver;

import android.app.Activity;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

public class Main extends Activity
{
	private ShortMessageReceiver shortMessageReceiver;

	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		shortMessageReceiver = new ShortMessageReceiver();
	} 

	public void onClick_Register_Broadcast(View view)
	{
		

		 registerReceiver(shortMessageReceiver, new IntentFilter(
		 "android.provider.Telephony.SMS_RECEIVED"));
		Toast.makeText(this, "    ", Toast.LENGTH_LONG).show();
	}

	public void onClick_Unregister_Broadcast(View view)
	{
		unregisterReceiver(shortMessageReceiver);
		Toast.makeText(this, "    ", Toast.LENGTH_LONG).show();
	}
}
이것은 자바 코드로 등록한 것이다.
package mobile.android.register.receiver;

import java.util.Set;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;
import android.widget.Toast;

public class ShortMessageReceiver extends BroadcastReceiver
{

	@Override
	public void onReceive(Context context, Intent intent)
	{
		Bundle bundle = intent.getExtras();

		if (bundle != null)
		{
			Set<String> keys = bundle.keySet();
			for (String key : keys)
			{
				Log.d("key", key);
			}

			Object[] objArray = (Object[]) bundle.get("pdus");
			SmsMessage[] messages = new SmsMessage[objArray.length];

			for (int i = 0; i < objArray.length; i++)
			{
				messages[i] = SmsMessage.createFromPdu((byte[]) objArray[i]);
				String s = "      
:" + messages[i].getOriginatingAddress() + "
"; s += " :" + messages[i].getDisplayMessageBody(); Toast.makeText(context, s, Toast.LENGTH_LONG).show(); } } } }
수신 후 onReceive 방법을 실행합니다.
여기에는 또 상응하는 권한이 필요하다
<uses-permission android:name="android.permission.RECEIVE_SMS" /> 

방송 메커니즘은 이해하기 어렵지 않다.또 하나의 문제는 두 가지 등록 방법이 어떤 차이가 있습니까?
androidmanifest에 있습니다.xml 파일 등록, 만약에 응용 프로그램이 꺼진다면 방송 메시지를 받아들일 수 있다. 예를 들어 배터리의 전량을 감시하고 응용 프로그램이 꺼진다면 여전히 전량의 변화를 감시할 수 있다.그러나 일부 상황은 적합하지 않다. 창에서 컨트롤을 업데이트하는 상태가 낫다. 이것은 manfest에 등록하는 것이 적합하지 않다. 이럴 때 자바 코드로 등록해야 한다. 이게 무슨 좋은 점이 있겠는가. 이것은 언제든지 프로그램을 열고 언제든지 등록할 수 있다. 사용하고 싶지 않으면 프로그램을 닫으면 수신기도 소각된다.이것이 바로 양자의 차이다.
라디오 수신기의 우선순위 문제
탭의android:priority를 통해 호출의 우선 순위를 설정합니다. 속성 값이 클수록 우선 순위가 높습니다.예를 들어android:priority="500"은android:priority="1000"보다 작다.이 속성은 동기화 처리 방식에만 적합하며, 비동기화 처리 방식에 대해서는 호출 순서가 물고기 우선순위 외에android 시스템의 병행 스케줄링과도 관련이 있다.

좋은 웹페이지 즐겨찾기