FMUSER Truyền video và âm thanh không dây dễ dàng hơn!

[email được bảo vệ] WhatsApp + 8618078869184
Ngôn ngữ

    Giải thích chi tiết về Broadcast trong Android

     

    Phát sóng được chia thành hai loại khác nhau: "Chương trình phát sóng bình thường" và "Chương trình phát sóng có thứ tự". Quảng bá thông thường là hoàn toàn không đồng bộ và có thể được nhận bởi tất cả các máy thu quảng bá cùng một lúc (về mặt logic). Hiệu quả phát bản tin tương đối cao nhưng có nhược điểm là máy thu không thể chuyển kết quả xử lý cho máy thu tiếp theo, không thể kết thúc. Broadcast Intent tuyên truyền; tuy nhiên, quảng bá có thứ tự dựa trên mức độ ưu tiên được khai báo bởi người nhận (được khai báo trong thuộc tính android: priority của phần tử bộ lọc ý định, số càng lớn, mức độ ưu tiên càng cao, phạm vi giá trị: -1000 đến 1000. Nó cũng có thể Gọi setPutor () của đối tượng IntentFilter để thiết lập), và người nhận lần lượt nhận được quảng bá. Ví dụ, nếu mức của A cao hơn mức của B và mức của B cao hơn mức C, thì chương trình phát sóng đầu tiên được truyền đến A, sau đó đến B và cuối cùng là C. Sau khi A nhận được chương trình phát sóng, nó có thể lưu trữ dữ liệu trong chương trình phát sóng. Khi chương trình phát sóng được gửi đến B, B có thể lấy dữ liệu được lưu trữ bởi A từ chương trình phát sóng.

     

    Context.sendBroadcast ()

       Những gì được gửi là một chương trình phát sóng thông thường và tất cả người đăng ký đều có cơ hội lấy và xử lý nó.

     

    Context.sendOrderedBroadcast ()

       Gửi là một chương trình phát sóng có trật tự. Hệ thống sẽ thực hiện lần lượt các đầu thu theo mức độ ưu tiên mà đầu thu đã khai báo. Người nhận trước có quyền kết thúc chương trình phát sóng (BroadcastReceiver.abortBroadcast ()). Nếu chương trình phát sóng bị kết thúc bởi bộ thu trước, bộ thu sau đó không còn có thể thu được chương trình phát sóng nữa. Đối với quảng bá có thứ tự, máy thu trước có thể lưu trữ kết quả xử lý trong Intent quảng bá, rồi chuyển nó cho máy thu tiếp theo.

     
    Bộ thu phát sóng (BroadcastReceiver) được sử dụng để nhận Ý định quảng bá và việc gửi Ý định quảng bá được thực hiện bằng cách gọi Context.sendBroadcast () và Context.sendOrderedBroadcast (). Thông thường, một Intent quảng bá có thể được nhận bởi nhiều máy thu quảng bá đã đăng ký Intent này. Tính năng này tương tự như bộ nhận tin nhắn Chủ đề trong JMS. Để thực hiện một phương pháp thu quảng bá như sau:

     

    Bước đầu tiên: xác định bộ thu phát sóng, kế thừa BroadcastReceiver và viết lại phương thức onReceive ().

    public class IncomingSMSReceiver expandBroadcastReceiver {
      @Override public void onReceive (Contextcontext, Intentintent) {
      }
    }

     

    Bước 2: Đăng ký chương trình phát sóng Ý định quan tâm, có hai phương thức đăng ký:

    Loại đầu tiên: sử dụng mã để đăng ký (đăng ký động)

    Bộ lọc IntentFilter = newIntentFilter ("android.provider.Telephony.SMS_RECEIVED");
    Bộ thu IncomingSMSReceiver = newIncomingSMSReceiver ();
    registerReceiver (bộ thu, bộ lọc);

     

    Loại thứ hai: Đăng ký trong nút trong tệp AndroidManifest.xml (đăng ký tĩnh)


      
           
      


    Hãy cùng xem xét sự khác biệt giữa đăng ký phát sóng động và đăng ký phát sóng tĩnh:
    Quảng bá thuê bao tĩnh còn được gọi là: quảng bá thường trú. Khi ứng dụng của bạn bị đóng, nếu có tin nhắn quảng bá, bộ thu phát sóng bạn đã viết cũng có thể nhận được tin nhắn đó. Phương thức đăng ký của nó là AndroidManifast trong ứng dụng của bạn. .xml để đăng ký.

     

    Quảng bá thuê bao động còn được gọi là: quảng bá không thường trú. Khi ứng dụng kết thúc, chương trình phát sóng sẽ tự nhiên biến mất. Ví dụ: bạn đăng ký chương trình phát sóng trong onCreate hoặc onResume trong hoạt động và bạn phải hủy đăng ký chương trình phát sóng trong onDestory hoặc onPause. Nếu không, một ngoại lệ sẽ được báo cáo, vì vậy bộ thu phát sóng của bạn sẽ không phải là người thường trú.

     

    Có một chi tiết ở đây là hai phương thức đăng ký. Khi gửi các chương trình phát sóng, bạn cần chú ý: Phương thức ý định ngầm được sử dụng để đăng ký động, vì vậy bạn cần sử dụng ý định ngầm để gửi khi gửi chương trình phát sóng. , Nếu không bộ thu phát sóng sẽ không thể thu được chương trình phát sóng. Hãy chú ý đến điểm này. Nhưng khi đăng ký tĩnh, vì nó được đăng ký trong AndroidMainfest.xml, nên có thể sử dụng Intent hiển thị và Intent ngầm định khi gửi các chương trình phát sóng (tất nhiên điều này chỉ dành cho các bộ thu phát sóng do chính chúng tôi xác định), vì vậy đề phòng, chúng tôi thường sử dụng Ý định gửi chương trình phát sóng.

     

    Hãy xem một ví dụ:

    Hãy xem cấu trúc dự án:

     

    Hãy xem chương trình phát sóng đăng ký tĩnh:
    gói com.broadcast.demo;

    nhập android.app.Activity;
    nhập android.content.Intent;
    nhập android.os.Bundle;
    nhập android.view.View;
    nhập android.view.View.OnClickListener;
    nhập android.widget.Button;

    nhập com.example.androidbroadcastdemo.R;

    / **
     * Phát sóng đăng ký tĩnh
     * @tác giả weijiang204321
     *
     */
    public class StaticRegisterBroadcastActivity mở rộng Hoạt động {

    @Ghi đè
    void onCreate được bảo vệ (Gói đã lưuInstanceState) {
    super.onCreate (saveInstanceState);
    setContentView (R.layout.activity_main);
    Nút btn = (Nút) findViewById (R.id.btn);
    Đến
    btn.setOnClickListener (OnClickListener mới () {
    @Ghi đè
    public void onClick (View v) {
    // Sử dụng một cách tĩnh để đăng ký chương trình phát sóng, bạn có thể sử dụng mục đích hiển thị để gửi chương trình phát sóng
    Intent broadcast = new Intent ("com.broadcast.set.broadcast");
    sendBroadcast (phát sóng, null);
    }
    Đến
    });
    }
    Đến
    }


    Đăng ký trong AndroidMainfest.xml:



    <tệp kê khai xmlns:android="
    http://schemas.android.com/apk/res/android"
        package = "com.example.androidbroadcastdemo"
        android: versionCode = "1"
        android: versionName = "1.0">

        <sử dụng-sdk
            android: minSdkVersion = "8"
            android: targetSdkVersion = "18" />
       
       
       
       
       
       

        <ứng dụng
            android: allowBackup = "true"
            android: icon = "@ drawable / ic_launcher"
            android: label = "@ string / app_name"
            android: theme = "@ style / AppTheme">
            <hoạt động
                android: name = "com.broadcast.demo.StaticRegisterBroadcastActivity"
                android: label = "@ string / app_name">
               
                   
                   
               
           
           
           
           
               
                   
               
           
           
           
           
           
               
                   
               
           
           
           
           
               
                   
               
           
           
           
           
           
               
                   
               
           
           
       

    Đừng lo lắng về nội dung khác bây giờ, vì chúng ta sẽ nói ở phần sau, ở đây chúng ta chỉ tập trung vào việc đăng ký các chương trình phát sóng tĩnh


          
               
                   
               
           


    Chúng ta hãy nhìn vào máy thu phát sóng:

    gói com.broadcast.receiver;

    nhập android.content.BroadcastReceiver;
    nhập android.content.Context;
    nhập android.content.Intent;
    nhập android.util.Log;

    / **
     * Phát sóng thu
     * @tác giả weijiang204321
     *
     */
    public class UnSortBroadcastReceiver mở rộng BroadcastReceiver {

    @Ghi đè
    public void onReceive (Bối cảnh ngữ cảnh, Mục đích ý định) {
    Log.e ("Intent_Action:", ý định.getAction () + "");
    }

    }
    Logic trong phương thức onReceive trong bộ thu phát sóng rất đơn giản, đó là in nội dung của Action.
    Chạy chương trình, kết quả rất đơn giản, đây không phải là hình.

     

    Hãy xem xét các đăng ký động:


    gói com.broadcast.demo;

    nhập android.app.Activity;
    nhập android.content.Intent;
    nhập android.content.IntentFilter;
    nhập android.os.Bundle;
    nhập android.view.View;
    nhập android.view.View.OnClickListener;
    nhập android.widget.Button;

    nhập com.broadcast.receiver.UnSortBroadcastReceiver;
    nhập com.example.androidbroadcastdemo.R;

    / **
     * Sử dụng cách động để đăng ký chương trình phát sóng
     * @tác giả weijiang204321
     *
     */
    public class DynamicRegisterBroadcastActivity mở rộng Hoạt động {
    Đến
    public static final String NEW_LIFEFORM_DETECTED = "com.dxz.broadcasttest.NEW_LIFEFORM";
    bộ thu UnSortBroadcastReceiver được bảo vệ;
    Đến
    @Ghi đè
    void onCreate được bảo vệ (Gói đã lưuInstanceState) {
    super.onCreate (saveInstanceState);
    setContentView (R.layout.activity_main);
    Nút btn0 = (Nút) findViewById (R.id.btn);
    btn0.setOnClickListener (OnClickListener mới () {
    public void onClick (View v) {
    // Gửi chương trình phát sóng
    Intent it = new Intent (NEW_LIFEFORM_DETECTED);
    sendBroadcast (nó);
    }
    });
    }

    @Ghi đè
    void onResume được bảo vệ () {
    super.onResume ();
    // Đăng ký phát sóng
    IntentFilter counterActionFilter = new IntentFilter (NEW_LIFEFORM_DETECTED);
    receiver = new UnSortBroadcastReceiver ();
    registerReceiver (máy thu, counterActionFilter);
    }

    @Ghi đè
    được bảo vệ void onPause () {
    super.onPause ();
    // Huỷ chương trình phát sóng
    unregisterReceiver (người nhận);
    }
    }
    Ở đây chúng tôi đang đăng ký phát sóng trong onResume và hủy đăng ký phát sóng trong onPause.
    Thay đổi Hoạt động đã khởi chạy thành DynamicRegisterBroadcastActivity trong AndroidMainfest.xml. Các nội dung khác không cần phải sửa đổi. Chạy chương trình và in ra kết quả rất đơn giản nên mình sẽ không thấy hình ở đây.

     

    Chúng ta hãy xem xét phát sóng có thứ tự và phát sóng không theo thứ tự

    Chúng tôi đã đề cập đến vấn đề này ngay từ đầu, hãy xem quá trình phát sóng bị rối loạn:

    Đầu tiên, chúng tôi xác định hai bộ thu phát sóng:

    Máy thu phát sóng đầu tiên:


    gói com.broadcast.receiver;

    nhập android.content.BroadcastReceiver;
    nhập android.content.Context;
    nhập android.content.Intent;
    nhập android.util.Log;

    / **
     * Máy thu phát sóng A
     * @tác giả weijiang204321
     *
     */
    public class SortBroadcastReceiverA mở rộng BroadcastReceiver {

    @Ghi đè
    public void onReceive (Bối cảnh ngữ cảnh, Mục đích ý định) {
    Log.e ("Demo:", "máy thu phát sóng A");
    }

    }
    Máy thu phát sóng thứ hai:

    gói com.broadcast.receiver;

    nhập android.content.BroadcastReceiver;
    nhập android.content.Context;
    nhập android.content.Intent;
    nhập android.util.Log;

    / **
     * Máy thu phát sóng B
     * @tác giả weijiang204321
     *
     */
    public class SortBroadcastReceiverB mở rộng BroadcastReceiver {

    @Ghi đè
    public void onReceive (Bối cảnh ngữ cảnh, Mục đích ý định) {
    Log.e ("Demo:", "Broadcast B");
    }

    Đến
    Đến
    }


    Đăng ký phát trong AndroidMainfest.xml


     
               
                   
               

           

               
                   
               

    kết quả hoạt động:


    Kết quả chạy là một chút kỳ lạ. Tại sao máy thu B ở phía trước và máy thu A ở phía sau? Lý do là khi chúng tôi đăng ký chương trình phát sóng trong AndroidMainfest.xml, chúng tôi đã đặt giá trị thuộc tính android: priority trong bộ lọc ý định. Giá trị càng lớn thì mức độ ưu tiên càng cao. , Mức độ ưu tiên của máy thu B là 1000, mức độ ưu tiên của máy thu A là 999, vì vậy B nhận quảng cáo trước, sau đó A nhận nó, nhưng không có kết nối giữa máy thu B và máy thu A và không thể có tương tác. bởi vì đây là một chương trình truyền phát không theo thứ tự và không đồng bộ, chúng tôi có thể thực hiện một thử nghiệm bằng cách thêm mã vào phương thức onReceiver trong B:

    abortBroadcast (); // Chấm dứt việc truyền chương trình phát sóng này

    kết quả hoạt động:

     

    Chúng ta có thể thấy lỗi nhắc, đó là phát sóng không theo thứ tự không được phép kết thúc phát sóng. Trên thực tế, việc chấm dứt là vô ích, vì máy thu A vẫn nhận được chương trình phát sóng.

     

    Hãy xem truyền phát có thứ tự, mã cần được sửa đổi:

    Đầu tiên là khi gửi một chương trình phát sóng:


    Intent broadcast = new Intent ("com.broadcast.set.broadcast");
    sendOrderedBroadcast (phát sóng, null);
    Sau đó, thêm một phương thức để kết thúc phát sóng trong máy thu B:
    abortBroadcast ();

    Mã khác không cần phải sửa đổi, kết quả hoạt động:

     

    Chỉ có máy thu B, máy thu A không nhận được chương trình phát sóng, vì quá trình phát sóng bị chấm dứt ở máy thu B và các máy thu tiếp theo không thể nhận được.

    Sửa đổi mã bên dưới:

    Người nhận B:


    gói com.broadcast.receiver;

    nhập android.content.BroadcastReceiver;
    nhập android.content.Context;
    nhập android.content.Intent;
    nhập android.os.Bundle;
    nhập android.util.Log;

    / **
     * Máy thu phát sóng B
     * @tác giả weijiang204321
     *
     */
    public class SortBroadcastReceiverB mở rộng BroadcastReceiver {

    @Ghi đè
    public void onReceive (Bối cảnh ngữ cảnh, Mục đích ý định) {
    Log.e ("Demo:", "máy thu phát sóng B");
    Gói bó = new Bundle ();
    bó.putString ("next_receiver", "máy thu phát tiếp theo");
    setResultExtras (gói);
    }
    Đến
    }
    Sau khi B nhận được chương trình phát sóng, nó sẽ lưu trữ một số giá trị và chuyển cho người nhận tiếp theo.


    Mã của người nhận A:


    gói com.broadcast.receive

     

     

     

     

    Liệt kê tất cả Câu hỏi

    Tên nick

    E-mail

    Câu hỏi

    sản phẩm khác của chúng tôi:

    Gói thiết bị đài FM chuyên nghiệp

     



     

    Giải pháp IPTV khách sạn

     


      Nhập email để nhận bất ngờ

      fmuser.org

      es.fmuser.org
      it.fmuser.org
      fr.fmuser.org
      de.fmuser.org
      af.fmuser.org -> Người Afrikaans
      sq.fmuser.org -> Tiếng Albania
      ar.fmuser.org -> tiếng Ả Rập
      hy.fmuser.org -> Armenia
      az.fmuser.org -> Azerbaijan
      eu.fmuser.org -> Basque
      be.fmuser.org -> Tiếng Belarus
      bg.fmuser.org -> Tiếng Bulgaria
      ca.fmuser.org -> Catalan
      zh-CN.fmuser.org -> Tiếng Trung (Giản thể)
      zh-TW.fmuser.org -> Trung Quốc (truyền thống)
      hr.fmuser.org -> Tiếng Croatia
      cs.fmuser.org -> Tiếng Séc
      da.fmuser.org -> Đan Mạch
      nl.fmuser.org -> Hà Lan
      et.fmuser.org -> Tiếng Estonia
      tl.fmuser.org -> Phi Luật Tân
      fi.fmuser.org -> Phần Lan
      fr.fmuser.org -> Pháp
      gl.fmuser.org -> Galicia
      ka.fmuser.org -> tiếng Georgia
      de.fmuser.org -> Đức
      el.fmuser.org -> Hy Lạp
      ht.fmuser.org -> Tiếng Creole của Haiti
      iw.fmuser.org -> Tiếng Do Thái
      hi.fmuser.org -> Tiếng Hindi
      hu.fmuser.org -> Hungary
      is.fmuser.org -> tiếng Iceland
      id.fmuser.org -> tiếng Indonesia
      ga.fmuser.org -> Ailen
      it.fmuser.org -> Ý
      ja.fmuser.org -> Nhật Bản
      ko.fmuser.org -> Hàn Quốc
      lv.fmuser.org -> Tiếng Latvia
      lt.fmuser.org -> Tiếng Litva
      mk.fmuser.org -> Người Macedonian
      ms.fmuser.org -> Mã Lai
      mt.fmuser.org -> Maltese
      no.fmuser.org -> Na Uy
      fa.fmuser.org -> tiếng Ba Tư
      pl.fmuser.org -> Tiếng Ba Lan
      pt.fmuser.org -> tiếng Bồ Đào Nha
      ro.fmuser.org -> Rumani
      ru.fmuser.org -> tiếng Nga
      sr.fmuser.org -> Tiếng Serbia
      sk.fmuser.org -> Tiếng Slovak
      sl.fmuser.org -> Tiếng Slovenia
      es.fmuser.org -> tiếng Tây Ban Nha
      sw.fmuser.org -> Tiếng Swahili
      sv.fmuser.org -> Thụy Điển
      th.fmuser.org -> Thái
      tr.fmuser.org -> Thổ Nhĩ Kỳ
      uk.fmuser.org -> Tiếng Ukraina
      ur.fmuser.org -> Tiếng Urdu
      vi.fmuser.org -> Tiếng việt
      cy.fmuser.org -> tiếng Wales
      yi.fmuser.org -> Yiddish

       
  •  

    FMUSER Truyền video và âm thanh không dây dễ dàng hơn!

  • Liên hệ

    Địa Chỉ:
    Phòng số 305 Tòa nhà HuiLan Số 273 đường Huanpu Quảng Châu Trung Quốc 510620

    E-mail:
    [email được bảo vệ]

    Điện thoại/WhatApps:
    +8618078869184

  • Categories

  • Đăng ký bản tin

    TÊN ĐẦU HOẶC ĐẦY ĐỦ

    E-mail

  • giải pháp paypal  Western UnionNgân hàng Trung Quốc
    E-mail:[email được bảo vệ]   WhatsApp: +8618078869184 Skype: sky198710021 Tro chuyện vơi tôi
    Copyright 2006-2020 Powered By www.fmuser.org

    Liên hệ