カスタムブロードキャストの送信と受信


文書ディレクトリ
###1、静態登録
1)まずMainActivityにactionを含むintentを新規作成する
2)intentにキー値、データを追加します.
3)放送の送信
package com.example.lum.mydroadcast;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Intent intent = new Intent();
        //       (  Action)
        intent.setAction("myBroadCast");
        //    
        intent.putExtra("data","hello");
        //    (    )
        sendBroadcast(intent);
    }
}

4)新しいクラス継承BroadcastReceiverというクラス5)実装におけるonReceiveメソッド6)受信したものによって異なるactionを実現する.
package com.example.lum.mydroadcast;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

/**
 * Created by lum on 2018/5/27.
 */

public class BroadCastReceive extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals("myBroadCast")) {
            //     ,         
            String str = intent.getStringExtra("data");
            System.out.println("         :" + str);
        }
    }
}

7)AndroidManifest.xmlファイルにイベントリスニングを追加



    
        
            
                

                
            
        

        
           
            
                  

            
        


    



8)運転テスト05-07 12:52:03.785 2982-10999/com.google.android.gms I/Icing: Indexing 916F24153C204B1D5D12E14401BC67324995BE10 from com.google.android.googlequicksearchbox 05-07 12:52:03.842 14551-14551/com.example.lum.mydroadcast I/System.out:受信ブロードキャストのデータ:hello 05-07 12:52:03.842982-10999/com.google.android.gms I/Icing: Indexing done 916F24153C204B1D5D12E14401BC67324995BE10
log情報を観察し,送信ブロードキャストが受け入れられ,データが伝達される.
主な考え方:1)ブロードキャストを受けるクラス継承BroadcastReceiverを作成し,switchの異なるactionを傍受する2)intent設定動作,携帯データを作成し,ブロードキャストを送信する3)Manifest.xmlファイル静的登録、actionとreceiveをバインド
####2、動的登録1)受信した放送受信クラスの作成
package com.example.lum.mydroadcast;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

/**
 * Created by lum on 2018/5/27.
 */

public class BroadCastReceive extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals("myBroadCastAction")) {
            //     ,         
            String str = intent.getStringExtra("data");
            System.out.println("         :" + str);
        }
    }
}


2)プライマリactivityにブロードキャスト受信機を動的に登録するとともにintentFilterでフィルタリングされたアクションオブジェクトをバインドする3)intentオブジェクトを作成携帯データ送信ブロードキャストを追加する4)登録解除
package com.example.lum.mydroadcast;

import android.content.Intent;
import android.content.IntentFilter;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

   private  BroadCastReceive mBroadCastReceive ;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }

    @Override
    protected void onResume() {
        super.onResume();

        //            
        mBroadCastReceive = new BroadCastReceive();
        IntentFilter intentFiltet = new IntentFilter();
        //       (  Action,            )
        intentFiltet.addAction("myBroadCastAction");
        //    ,      ,            ,intent       
        registerReceiver(mBroadCastReceive,intentFiltet);


        //  intent   
        Intent intent = new Intent();
        //     
        intent.setAction("myBroadCastAction");
        //       
        intent.putExtra("data", "Hi!I am broadcastData!");
        sendBroadcast(intent);

    }

    @Override
    protected void onPause() {
        //    
        unregisterReceiver(mBroadCastReceive);
        super.onPause();
    }
}


効果:logを観覧します:05-27 07:18:40.392 16762-16762/?I/System.out:受信した放送のデータ:Hi!I am broadcastData! 05-27 07:18:40.439 16762-16785/? I/OpenGLRenderer: Initialized EGL, version 1.4
構想分析:1)ブロードキャストを受けるクラス継承BroadcastReceiverを作成し,switchの異なるactionを傍受する2)メインactivityでインスタンス化して作成した傍受クラス,intentfilterオブジェクトをインスタンス化する3)フィルタリングしたactionとブロードキャストの受信機を登録によりバインドする4)intent設定actionを作成し,データを携帯し,ブロードキャストを送信する5)登録を取り消す
###3、注意事項放送の受け入れ方法では、実行するコードの論理時間は10 sを超えてはいけない.そうしないと、プログラムのエラーを引き起こす.具体的に実行する大量の論理コードは、他のクラスの方法で実現することができる.