FMUSER Wirlessはビデオとオーディオをより簡単に送信します!

[メール保護] WhatsApp + 8618078869184
言語設定

    Androidでのブロードキャストの詳細な説明

     

    放送は「通常放送」と「定期放送」の1000種類に分けられます。 通常の放送は完全に非同期であり、すべての放送受信機が同時に(論理的に)受信できます。 メッセージ配信の効率は比較的高いですが、受信者が処理結果を次の受信者に渡すことができず、終了できないという欠点があります。 ブロードキャストインテントの伝播。 ただし、順序付けられたブロードキャストは、受信者によって宣言された優先度に基づいています(intent-filter要素のandroid:priority属性で宣言されている場合、数値が大きいほど優先度が高くなり、値の範囲は-1000〜XNUMXになります。 IntentFilterオブジェクトのsetPriority()を呼び出して設定します)、受信者は順番にブロードキャストを受信します。 たとえば、AのレベルがBのレベルよりも高く、BのレベルがCよりも高い場合、ブロードキャストは最初にAに送信され、次にBに送信され、最後にCに送信されます。Aがブロードキャストを取得すると、ブロードキャストにデータを保存できます。 ブロードキャストがBに送信されると、BはAによって保存されたデータをブロードキャストから取得できます。

     

    Context.sendBroadcast()

       送信されるのは通常のブロードキャストであり、すべてのサブスクライバーはそれを取得して処理する機会があります。

     

    Context.sendOrderedBroadcast()

       送信は整然とした放送です。 システムは、受信者によって宣言された優先度に従って、受信者をXNUMXつずつ実行します。 前の受信者には、ブロードキャストを終了する権利があります(BroadcastReceiver.abortBroadcast())。 ブロードキャストが前のレシーバーによって終了された場合、後者のレシーバーはブロードキャストを取得できなくなります。 順序付けされたブロードキャストの場合、前のレシーバーは処理結果をブロードキャストインテントに保存し、それを次のレシーバーに渡すことができます。

     
    ブロードキャストレシーバー(BroadcastReceiver)は、ブロードキャストインテントを受信するために使用され、ブロードキャストインテントの送信は、Context.sendBroadcast()およびContext.sendOrderedBroadcast()を呼び出すことによって実現されます。 通常、ブロードキャストインテントは、このインテントにサブスクライブしている複数のブロードキャストレシーバーで受信できます。 この機能は、JMSのトピックメッセージレシーバーに似ています。 ブロードキャストレシーバーメソッドを実装するには、次のようにします。

     

    最初のステップ:ブロードキャストレシーバーを定義し、BroadcastReceiverを継承し、onReceive()メソッドを書き直します。

    パブリッククラスIncomingSMSReceiverextendsBroadcastReceiver {
      @Override public void onReceive(Contextcontext、Intentintent){
      }
    }

     

    ステップ2:対象のブロードキャストインテントをサブスクライブします。XNUMXつのサブスクリプション方法があります。

    最初のタイプ:コードを使用してサブスクライブする(動的サブスクリプション)

    IntentFilter filter = newIntentFilter( "android.provider.Telephony.SMS_RECEIVED");
    IncomingSMSReceiverレシーバー= newIncomingSMSReceiver();
    registerReceiver(レシーバー、フィルター);

     

    XNUMX番目のタイプ: AndroidManifest.xmlファイルのノード(静的サブスクリプション)


      
           
      


    動的ブロードキャストサブスクリプションと静的ブロードキャストサブスクリプションの違いを見てみましょう。
    静的サブスクリプションブロードキャストは、常駐ブロードキャストとも呼ばれます。 アプリケーションを閉じたときにブロードキャストメッセージがある場合は、作成したブロードキャストレシーバーもそれを受信できます。 その登録方法は、アプリケーションでのAndroidManifastです。 サブスクリプション用の.xml。

     

    動的サブスクリプションブロードキャストは、非常駐ブロードキャストとも呼ばれます。 アプリケーションが終了すると、ブロードキャストは自然に消えます。 たとえば、アクティビティのonCreateまたはonResumeでブロードキャストをサブスクライブし、onDestoryまたはonPauseでブロードキャストサブスクリプションをキャンセルする必要があります。 それ以外の場合は、例外が報告されるため、ブロードキャストレシーバーは非常駐になります。

     

    ここにもうXNUMXつ詳細があります。それは、XNUMXつのサブスクリプション方法です。 ブロードキャストを送信するときは、次の点に注意する必要があります。動的登録には暗黙的インテント方式が使用されるため、ブロードキャストを送信するときに送信するには暗黙的インテントを使用する必要があります。 、それ以外の場合、放送受信機は放送を受信できません。 この点に注意してください。 ただし、静的にサブスクライブする場合、AndroidMainfest.xmlでサブスクライブされるため、ブロードキャストを送信するときにdisplayIntentとimplicitIntentを使用できます(もちろん、これは自分で定義したブロードキャストレシーバーのみです)。念のため、通常は暗黙的に使用します。ブロードキャストを送信する意図。

     

    例を見てみましょう:

    プロジェクトの構造を見てみましょう。

     

    静的サブスクリプションブロードキャストを見てください。
    パッケージcom.broadcast.demo;

    android.app.Activityをインポートします。
    android.content.Intentをインポートします。
    android.os.Bundleをインポートします。
    android.view.Viewをインポートします。
    android.view.View.OnClickListener をインポートします。
    android.widget.Buttonをインポートします。

    インポートcom.example.androidbroadcastdemo.R;

    / **
     *静的サブスクリプションブロードキャスト
     * @著者 weijiang204321
     *
     */
    パブリッククラスStaticRegisterBroadcastActivityはActivity {を拡張します

    @オーバーライド
    protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ボタンbtn =(ボタン)findViewById(R.id.btn);

    btn.setOnClickListener(new OnClickListener(){
    @オーバーライド
    public void onClick(View v){
    //静的な方法を使用してブロードキャストを登録します。表示インテントを使用してブロードキャストを送信できます
    インテントブロードキャスト= new Intent( "com.broadcast.set.broadcast");
    sendBroadcast(broadcast、null);
    }

    });
    }

    }


    AndroidMainfest.xmlでサブスクライブします。



    <マニフェストxmlns:android=
    http://schemas.android.com/apk/res/android"
        package = "com.example.androidbroadcastdemo"
        android:versionCode = "1"
        android:versionName = "1.0">

        <SDK の使用
            android:minSdkVersion = "8"
            android:targetSdkVersion = "18" />
       
       
       
       
       
       

        <アプリケーション
            android:allowBackup = "true"
            android:icon = "@ drawable / ic_launcher"
            android:label = "@ string / app_name"
            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をインポートします。
    android.util.Logをインポートします。

    / **
     *放送受信機
     * @著者 weijiang204321
     *
     */
    パブリッククラスUnSortBroadcastReceiverはBroadcastReceiverを拡張します{

    @オーバーライド
    public void onReceive(Context context、Intent intent){
    Log.e( "Intent_Action:"、intent.getAction()+ "");
    }

    }
    ブロードキャストレシーバーのonReceiveメソッドのロジックは非常に単純で、アクションのコンテンツを出力します。
    プログラムを実行すると、結果は非常に単純です。これは図ではありません。

     

    動的サブスクリプションを見てみましょう。


    パッケージcom.broadcast.demo;

    android.app.Activityをインポートします。
    android.content.Intentをインポートします。
    android.content.IntentFilterをインポートします;
    android.os.Bundleをインポートします。
    android.view.Viewをインポートします。
    android.view.View.OnClickListener をインポートします。
    android.widget.Buttonをインポートします。

    インポートcom.broadcast.receiver.UnSortBroadcastReceiver;
    インポートcom.example.androidbroadcastdemo.R;

    / **
     *動的な方法を使用してブロードキャストを登録する
     * @著者 weijiang204321
     *
     */
    パブリッククラスDynamicRegisterBroadcastActivityはActivity {を拡張します

    public static final String 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(new OnClickListener(){
    public void onClick(View v){
    //ブロードキャストを送信します
    Intent it = new Intent(NEW_LIFEFORM_DETECTED);
    sendBroadcast(it);
    }
    });
    }

    @オーバーライド
    保護されたvoidonResume(){
    super.onResume();
    //放送に登録する
    IntentFilter counterActionFilter = new IntentFilter(NEW_LIFEFORM_DETECTED);
    レシーバー=新しいUnSortBroadcastReceiver();
    registerReceiver(receiver、counterActionFilter);
    }

    @オーバーライド
    保護されたvoidonPause(){
    super.onPause();
    //ブロードキャストをキャンセルします
    unregisterReceiver(receiver);
    }
    }
    ここでは、onResumeでのブロードキャストをサブスクライブし、onPauseでのブロードキャストをサブスクライブ解除しています。
    起動したアクティビティをAndroidMainfest.xmlのDynamicRegisterBroadcastActivityに変更します。 その他のコンテンツは変更する必要はありません。 プログラムを実行して結果を印刷するのは非常に簡単なので、ここに画像は表示されません。

     

    順序付き放送と順序なし放送を見てみましょう

    これについては冒頭ですでに述べましたが、無秩序な放送を見てみましょう。

    まず、XNUMXつのブロードキャストレシーバーを定義します。

    最初の放送受信機:


    パッケージcom.broadcast.receiver;

    android.content.BroadcastReceiverをインポートします。
    android.content.Contextをインポートします。
    android.content.Intentをインポートします。
    android.util.Logをインポートします。

    / **
     *放送受信機A
     * @著者 weijiang204321
     *
     */
    パブリッククラスSortBroadcastReceiverAはBroadcastReceiverを拡張します{

    @オーバーライド
    public void onReceive(Context context、Intent intent){
    Log.e( "デモ:"、 "ブロードキャストレシーバーA");
    }

    }
    XNUMX番目の放送受信機:

    パッケージcom.broadcast.receiver;

    android.content.BroadcastReceiverをインポートします。
    android.content.Contextをインポートします。
    android.content.Intentをインポートします。
    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はまだブロードキャストを受信して​​いるため、終了は役に立ちません。

     

    整然としたブロードキャストを見てみましょう。コードを変更する必要があります。

    XNUMXつ目は、ブロードキャストを送信するときです。


    インテントブロードキャスト= new Intent( "com.broadcast.set.broadcast");
    sendOrderedBroadcast(broadcast、null);
    次に、Bレシーバーでブロードキャストを終了するメソッドを追加します。
    abortBroadcast();

    他のコードを変更する必要はありません。操作結果は次のとおりです。

     

    ブロードキャストはレシーバーBで終了し、後続のレシーバーはそれを受け入れることができないため、レシーバーBのみがあり、レシーバーAはブロードキャストを受信しません。

    以下のコードを変更します。

    受信者B:


    パッケージcom.broadcast.receiver;

    android.content.BroadcastReceiverをインポートします。
    android.content.Contextをインポートします。
    android.content.Intentをインポートします。
    android.os.Bundleをインポートします。
    android.util.Logをインポートします。

    / **
     *放送受信機B
     * @著者 weijiang204321
     *
     */
    パブリッククラスSortBroadcastReceiverBはBroadcastReceiverを拡張します{

    @オーバーライド
    public void onReceive(Context context、Intent intent){
    Log.e( "デモ:"、 "ブロードキャストレシーバーB");
    バンドルbundle = new Bundle();
    bundle.putString( "next_receiver"、 "次のブロードキャストレシーバー");
    setResultExtras(bundle);
    }

    }
    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 Wirlessはビデオとオーディオをより簡単に送信します!

  • お問い合わせ

    住所:
    No.305ルームHuiLanビルNo.273HuanpuRoad広州中国510620

    Eメール:
    [メール保護]

    Tel / WhatApps:
    +8618078869184

  • カテゴリー

  • ニュースレター

    名またはフルネーム

    電子メール

  • PayPalのソリューション  ウエスタンユニオン中国銀行
    Eメール:[メール保護]   WhatsApp:+8618078869184 Skype:sky198710021 私とチャットしてくれ
    FC2ブログ著作権2006-2020 www.fmuser.org

    お問い合わせ(英語)