FMUSER 무선 전송 비디오 및 오디오가 더 쉬워졌습니다!

[이메일 보호] WhatsApp에 + 8618078869184
지원하는 언어

    Android에서 브로드 캐스트에 대한 자세한 설명

     

    방송은 "일반 방송"과 "주문 방송"의 두 가지 유형으로 나뉩니다. 일반 브로드캐스트는 완전히 비동기식이며 동시에(논리적으로) 모든 브로드캐스트 수신기에서 수신할 수 있습니다. 메시지 전달의 효율성은 상대적으로 높지만 수신자가 처리 결과를 다음 수신자에게 전달할 수 없고 종료할 수 없다는 단점이 있습니다. 브로드캐스트 의도 전파 그러나 순서가 지정된 브로드캐스트는 수신자가 선언한 우선순위(intent-filter 요소의 android:priority 속성에서 선언, 숫자가 클수록 우선순위가 높으며 값 범위: -1000 ~ 1000입니다. 또한 가능한 IntentFilter 객체의 setPriority()를 호출하여 설정), 수신자는 차례로 브로드캐스트를 수신합니다. 예를 들어, A의 레벨이 B의 레벨보다 높고 B의 레벨이 C보다 높다면 먼저 A에게 방송이 전송되고, 그 다음 B에게, 마지막으로 C에게 방송이 전송됩니다. A가 방송을 받은 후, 브로드캐스트에 데이터를 저장할 수 있습니다. 브로드캐스트가 B에게 전송되면 B는 브로드캐스트에서 A가 저장한 데이터를 가져올 수 있습니다.

     

    Context.sendBroadcast ()

       전송되는 것은 일반 브로드캐스트이며 모든 가입자는 이를 획득하고 처리할 수 있는 기회를 갖습니다.

     

    Context.sendOrderedBroadcast()

       보내기는 질서 있는 방송입니다. 시스템은 수신자가 선언한 우선 순위에 따라 수신자를 하나씩 실행합니다. 이전 수신자는 브로드캐스트를 종료할 권한이 있습니다(BroadcastReceiver.abortBroadcast()). 브로드캐스트가 이전 수신기에 의해 종료되면 후자의 수신기는 더 이상 브로드캐스트를 받을 수 없습니다. 주문된 브로드캐스트의 경우 이전 수신자는 처리 결과를 브로드캐스트 인텐트에 저장한 후 다음 수신자에게 전달할 수 있습니다.

     
    브로드캐스트 리시버(BroadcastReceiver)는 브로드캐스트 Intent를 수신하는 데 사용되며 브로드캐스트 Intent의 전송은 Context.sendBroadcast() 및 Context.sendOrderedBroadcast()를 호출하여 실현됩니다. 일반적으로 브로드캐스트 인텐트는 이 인텐트에 가입한 여러 브로드캐스트 수신기에서 수신할 수 있습니다. 이 기능은 JMS의 주제 메시지 수신자와 유사합니다. 브로드캐스트 리시버 메서드를 구현하는 방법은 다음과 같습니다.

     

    첫 번째 단계: broadcast receiver를 정의하고 BroadcastReceiver를 상속하고 onReceive() 메서드를 다시 작성합니다.

    공개 클래스 IncomingSMSReceiver extendsBroadcastReceiver {
      @Override public void onReceive(Contextcontext, Intentintent) {
      }
    }

     

    2단계: 방송 구독하기 관심 있는 의도는 두 가지 구독 방법이 있습니다.

    첫 번째 유형: 코드를 사용하여 구독(동적 구독)

    IntentFilter 필터 = newIntentFilter("android.provider.Telephony.SMS_RECEIVED");
    IncomingSMSReceiver 수신기 = newIncomingSMSReceiver();
    registerReceiver(수신자, 필터);

     

    두 번째 유형: 구독하기 AndroidManifest.xml 파일의 노드(정적 구독)


      
           
      


    동적 브로드캐스트 구독과 정적 브로드캐스트 구독의 차이점을 살펴보겠습니다.
    정적 구독 브로드캐스트는 상주 브로드캐스트라고도 합니다. 애플리케이션이 닫힐 때 브로드캐스트 메시지가 있으면 작성한 브로드캐스트 리시버도 수신할 수 있습니다. 등록 방법은 애플리케이션의 AndroidManifast입니다. 구독용 .xml.

     

    동적 가입 브로드캐스트는 비상주 브로드캐스트라고도 합니다. 신청이 종료되면 방송은 자연스럽게 사라집니다. 예를 들어 활동의 onCreate 또는 onResume에서 브로드캐스트를 구독하고 onDestory 또는 onPause에서 브로드캐스트 구독을 취소해야 합니다. 그렇지 않으면 예외가 보고되어 브로드캐스트 리시버가 비거주자가 됩니다.

     

    여기에는 두 가지 구독 방법에 대한 세부 정보가 하나 더 있습니다. 브로드캐스트를 보낼 때 주의해야 할 사항: 암시적 인텐트 방법은 동적 등록에 사용되므로 브로드캐스트를 보낼 때 암시적 인텐트를 사용하여 보내야 합니다. , 그렇지 않으면 브로드캐스트 리시버가 브로드캐스트를 수신할 수 없습니다. 이 점에 주의하십시오. 하지만 정적으로 구독할 때는 AndroidMainfest.xml에서 구독하기 때문에 방송을 보낼 때 display Intent와 implicit Intent를 사용할 수 있기 때문에(당연히 이것은 우리가 정의한 broadcast receiver에만 해당), 그래서 우리는 일반적으로 implicit을 사용한다. 브로드캐스트를 전송하려는 의도입니다.

     

    예를 살펴 보겠습니다.

    프로젝트 구조를 살펴보십시오.

     

    정적 구독 브로드캐스트를 살펴보십시오.
    패키지 com.broadcast.demo;

    android.app.Activity 가져오기;
    android.content.Intent 가져오기;
    android.os.Bundle 가져오기;
    android.view.View 가져오기;
    import android.view.View.OnClickListener;
    가져오기 android.widget.Button;

    import com.example.androidbroadcastdemo.R;

    / **
     * 정적 구독 방송
     * @작가 weijiang204321
     *
     */
    공개 클래스 StaticRegisterBroadcastActivity는 활동 {를 확장합니다.

    @우세하다
    protected void onCreate (Bundle savedInstanceState) {
    super.onCreate (savedInstanceState);
    setContentView (R.layout.activity_main);
    버튼 btn = (버튼)findViewById(R.id.btn);

    btn.setOnClickListener(새로운 OnClickListener(){
    @우세하다
    public void onClick (View v) {
    // 정적 방법을 사용하여 브로드캐스트를 등록하고 디스플레이 인텐트를 사용하여 브로드캐스트를 보낼 수 있습니다.
    인텐트 브로드캐스트 = new Intent("com.broadcast.set.broadcast");
    sendBroadcast(브로드캐스트, null);
    }

    });
    }

    }


    AndroidMainfest.xml에서 구독:



    <매니페스트 xmlns:android="
    http://schemas.android.com/apk/res/android"
        패키지="com.example.androidbroadcastdemo"
        안드로이드:버전 코드="1"
        android:versionName="1.0">

        <사용-SDK
            android:minSdkVersion="8"
            android:targetSdkVersion="18" />
       
       
       
       
       
       

        <신청
            android:allowBackup="참"
            android:icon="@drawable/ic_launcher"
            android:label="@문자열/앱_이름"
            android:theme="@style/AppTheme">
            <활동
                android:name="com.broadcast.demo.StaticRegisterBroadcastActivity"
                android:label="@string/app_name">
               
                   
                   
               
           
           
           
           
               
                   
               
           
           
           
           
           
               
                   
               
           
           
           
           
               
                   
               
           
           
           
           
           
               
                   
               
           
           
       

    지금은 다른 콘텐츠에 대해 걱정하지 마세요. 나중에 이야기할 것입니다. 여기서는 정적 브로드캐스트 등록에만 중점을 둡니다.


          
               
                   
               
           


    브로드캐스트의 수신기를 살펴보겠습니다.

    패키지 com.broadcast.receiver;

    android.content.BroadcastReceiver 가져오기;
    android.content.Context 가져오기;
    android.content.Intent 가져오기;
    import android.util.Log;

    / **
     * 방송 수신기
     * @작가 weijiang204321
     *
     */
    공개 클래스 UnSortBroadcastReceiver 확장 BroadcastReceiver {

    @우세하다
    public void onReceive (Context context, Intent intent) {
    Log.e("Intent_Action:",intent.getAction()+"");
    }

    }
    브로드캐스트 리시버의 onReceive 메서드에 있는 로직은 Action의 내용을 출력하는 매우 간단합니다.
    프로그램을 실행하면 결과는 매우 간단합니다. 여기에는 그림이 없습니다.

     

    동적 구독을 살펴보겠습니다.


    패키지 com.broadcast.demo;

    android.app.Activity 가져오기;
    android.content.Intent 가져오기;
    android.content.IntentFilter 가져오기;
    android.os.Bundle 가져오기;
    android.view.View 가져오기;
    import android.view.View.OnClickListener;
    가져오기 android.widget.Button;

    import com.broadcast.receiver.UnSortBroadcastReceiver;
    import com.example.androidbroadcastdemo.R;

    / **
     * 동적인 방식으로 방송 등록
     * @작가 weijiang204321
     *
     */
    공개 클래스 DynamicRegisterBroadcastActivity는 활동 {를 확장합니다.

    공개 정적 최종 문자열 NEW_LIFEFORM_DETECTED = "com.dxz.broadcasttest.NEW_LIFEFORM";
    보호된 UnSortBroadcastReceiver 수신기;

    @우세하다
    protected void onCreate (Bundle savedInstanceState) {
    super.onCreate (savedInstanceState);
    setContentView (R.layout.activity_main);
    버튼 btn0 = (버튼) findViewById(R.id.btn);
    btn0.setOnClickListener(새로운 OnClickListener() {
    public void onClick (View v) {
    //방송 보내기
    의도 = 새로운 의도(NEW_LIFEFORM_DETECTED);
    sendBroadcast(it);
    }
    });
    }

    @우세하다
    protected void onResume () {
    super.onResume ();
    //방송 등록
    IntentFilter counterActionFilter = 새로운 IntentFilter(NEW_LIFEFORM_DETECTED);
    수신자 = new UnSortBroadcastReceiver();
    registerReceiver(수신자, counterActionFilter);
    }

    @우세하다
    보호 무효 onPause() {
    super.onPause();
    //방송 취소
    unregisterReceiver(수신자);
    }
    }
    여기에서는 onResume에서 방송을 구독하고 onPause에서 방송을 구독 취소합니다.
    시작된 활동을 AndroidMainfest.xml에서 DynamicRegisterBroadcastActivity로 변경합니다. 다른 콘텐츠는 수정할 필요가 없습니다. 프로그램을 실행하고 결과를 인쇄하는 것은 매우 간단하므로 여기서는 그림을 보지 않겠습니다.

     

    순서 방송과 순서 없는 방송에 대해 알아보겠습니다.

    우리는 이미 처음에 이것을 언급했습니다. 무질서한 방송을 살펴 보겠습니다.

    먼저 두 개의 broadcast receiver를 정의합니다.

    첫 번째 브로드캐스트 리시버:


    패키지 com.broadcast.receiver;

    android.content.BroadcastReceiver 가져오기;
    android.content.Context 가져오기;
    android.content.Intent 가져오기;
    import android.util.Log;

    / **
     * 방송 수신기 A
     * @작가 weijiang204321
     *
     */
    공개 클래스 SortBroadcastReceiverA 확장 BroadcastReceiver{

    @우세하다
    public void onReceive (Context context, Intent intent) {
    Log.e("데모:","브로드캐스트 리시버 A");
    }

    }
    두 번째 브로드캐스트 리시버:

    패키지 com.broadcast.receiver;

    android.content.BroadcastReceiver 가져오기;
    android.content.Context 가져오기;
    android.content.Intent 가져오기;
    import android.util.Log;

    / **
     * 방송 수신기 B
     * @작가 weijiang204321
     *
     */
    공용 클래스 SortBroadcastReceiverB 확장 BroadcastReceiver{

    @우세하다
    public void onReceive (Context context, Intent intent) {
    Log.e("데모:","방송 B");
    }



    }


    AndroidMainfest.xml에서 브로드캐스트 구독


     
               
                   
               

           

               
                   
               

    작업 결과 :


    실행 결과가 약간 이상합니다. 리시버 B가 앞에 있고 리시버 A가 뒤에 있는 이유는 무엇입니까? 그 이유는 AndroidMainfest.xml에서 브로드캐스트를 구독할 때 intent-filter에 android:priority 속성 값을 설정했기 때문입니다. 값이 클수록 우선순위가 높아집니다. , 수신자 B의 우선순위는 1000, 수신자 A의 우선순위는 999이므로 B가 먼저 브로드캐스트를 수신하고 A가 수신하지만 수신자 B와 수신자 A 사이에 연결이 없고 인터랙션이 없을 수 있음, 이것은 비순차 브로드캐스트 및 비동기이기 때문에 B의 onReceiver 메서드에 코드를 추가하여 실험을 수행할 수 있습니다.

    abortBroadcast();//이 브로드캐스트의 전송을 종료합니다.

    작업 결과 :

     

    순서가 없는 방송은 방송을 종료할 수 없다는 프롬프트 오류를 ​​볼 수 있습니다. 실제로 수신자 A가 여전히 브로드캐스트를 수신하기 때문에 종료는 쓸모가 없습니다.

     

    순서대로 브로드캐스트를 살펴보겠습니다. 코드를 수정해야 합니다.

    첫 번째는 브로드캐스트를 보낼 때입니다.


    인텐트 브로드캐스트 = new Intent("com.broadcast.set.broadcast");
    sendOrderedBroadcast(브로드캐스트, null);
    그런 다음 B 수신기에서 브로드캐스트를 종료하는 메서드를 추가합니다.
    방송중단();

    다른 코드는 수정할 필요가 없으며 작업 결과는 다음과 같습니다.

     

    리시버 B만 있고, 리시버 A는 브로드캐스트를 수신하지 않습니다. 왜냐하면 브로드캐스트는 리시버 B에서 종료되고 후속 리시버는 이를 수락할 수 없기 때문입니다.

    아래 코드를 수정합니다.

    수신자 B:


    패키지 com.broadcast.receiver;

    android.content.BroadcastReceiver 가져오기;
    android.content.Context 가져오기;
    android.content.Intent 가져오기;
    android.os.Bundle 가져오기;
    import android.util.Log;

    / **
     * 방송 수신기 B
     * @작가 weijiang204321
     *
     */
    공용 클래스 SortBroadcastReceiverB 확장 BroadcastReceiver{

    @우세하다
    public void onReceive (Context context, Intent intent) {
    Log.e("데모:","브로드캐스트 리시버 B");
    번들 번들 = new Bundle ();
    bundle.putString("next_receiver", "다음 브로드캐스트 리시버");
    setResultExtras(번들);
    }

    }
    B는 브로드캐스트를 수신한 후 일부 값을 저장하고 다음 수신자에게 전달합니다.


    수신자 A의 코드:


    패키지 com.broadcast.receive

     

     

     

     

    모든 질문 목록

    별명

    이메일

    문의

    우리의 다른 제품 :

    전문 FM 라디오 방송국 장비 패키지

     



     

    호텔 IPTV 솔루션

     


      놀라움을 얻으려면 이메일을 입력하십시오.

      fmuser.org

      es.fmuser.org
      it.fmuser.org
      fr.fmuser.org
      de.fmuser.org
      af.fmuser.org -> 아프리칸스어
      sq.fmuser.org -> 알바니아어
      ar.fmuser.org -> 아랍어
      hy.fmuser.org -> 아르메니아어
      az.fmuser.org -> 아제르바이잔 어
      eu.fmuser.org -> 바스크
      be.fmuser.org -> 벨로루시 어
      bg.fmuser.org -> 불가리아어
      ca.fmuser.org -> 카탈로니아 어
      zh-CN.fmuser.org -> 중국어 (간체)
      zh-TW.fmuser.org -> 중국어 (번체)
      hr.fmuser.org -> 크로아티아어
      cs.fmuser.org -> 체코
      da.fmuser.org -> 덴마크어
      nl.fmuser.org -> 네덜란드어
      et.fmuser.org -> 에스토니아어
      tl.fmuser.org -> 필리피노
      fi.fmuser.org -> 핀란드어
      fr.fmuser.org -> 프랑스어
      gl.fmuser.org -> 갈리시아어
      ka.fmuser.org -> 조지아 어
      de.fmuser.org -> 독일어
      el.fmuser.org -> 그리스
      ht.fmuser.org -> 아이티 크리올
      iw.fmuser.org -> 히브리어
      hi.fmuser.org -> 힌디어
      hu.fmuser.org 헝가리어
      is.fmuser.org -> 아이슬란드 어
      id.fmuser.org -> 인도네시아어
      ga.fmuser.org -> 아일랜드어
      it.fmuser.org -> 이탈리아어
      ja.fmuser.org -> 일본어
      ko.fmuser.org -> 한국어
      lv.fmuser.org -> 라트비아어
      lt.fmuser.org 리투아니아어
      mk.fmuser.org -> 마케도니아 어
      ms.fmuser.org -> 말레이어
      mt.fmuser.org -> 몰타어
      no.fmuser.org -> 노르웨이어
      fa.fmuser.org -> 페르시아어
      pl.fmuser.org -> 폴란드어
      pt.fmuser.org -> 포르투갈어
      ro.fmuser.org -> 루마니아어
      ru.fmuser.org -> 러시아어
      sr.fmuser.org -> 세르비아어
      sk.fmuser.org -> 슬로바키아어
      sl.fmuser.org -> 슬로베니아어
      es.fmuser.org -> 스페인어
      sw.fmuser.org -> 스와힐리
      sv.fmuser.org -> 스웨덴어
      th.fmuser.org -> 태국
      tr.fmuser.org -> 터키어
      uk.fmuser.org -> 우크라이나어
      ur.fmuser.org -> 우르두어
      vi.fmuser.org -> 베트남어
      cy.fmuser.org -> 웨일스 어
      yi.fmuser.org -> 이디시어

       
  •  

    FMUSER 무선 전송 비디오 및 오디오가 더 쉬워졌습니다!

  • Contact

    주소:
    No.305 Room HuiLan Building No.273 Huanpu Road 광저우 중국 510620

    이메일:
    [이메일 보호]

    전화 / WhatApps :
    +8618078869184

  • 카테고리

  • MMCC 뉴스레터

    이름 또는 전체 이름

    이메일

  • 페이팔 솔루션  웨스턴 유니언중국의 은행
    이메일:[이메일 보호]   WhatsApp : +8618078869184 스카이프 : sky198710021 나와 함께 채팅
    저작권 2006-2020은에 의해 구동 www.fmuser.org

    문의하기