Android学習--BroadcastReceiver

13953 ワード

ブロードキャストとは

  • は、ブロードキャスト送信、ブロードキャスト受信(送信側、受信側)、(受信側がない場合、送信側もデータを送信)
  • に分ける.
  • androidの4つのコンポーネントの1つ
  • 複数のページにまたがる
  • 複数のプロセス/複数のapp
  • にまたがる

    ぶんかつ

  • 無秩序放送:同時受信、前後順なし
  • 秩序放送:順序、優先度に従って、
  • を逐次伝達する.
  • ヒステリシスブロードキャスト:受信者が
  • を受信するまで受信者が待機する

    登録方法

  • 静的登録:このような登録は常駐型である、すなわちアプリケーションがオフになると、ブロードキャスト情報が送信されると、MyReceiverもシステム呼び出しにより自動的に
  • を実行する.
  • 動的登録:非常駐型で、
  • を実行するには呼び出す必要があります.

    ブロードキャストの使用方法


    静的登録無秩序ブロードキャスト:

  • 新しいプロジェクト送信ブロードキャスト、
  • 受信者として別の新しいプロジェクトを新規作成し、BroadcastReceiverを継承するエンティティクラスを新規作成し、受信者AndroidManifestにBroadcastReceiver
  • を登録します.
    <receiver android:name=".MyReceiver">
    <intent-filter>
    <action android:name="zhifubao"/>//         
    intent-filter>
    receiver>

    送信者sendActivity:
    public class SendActivity extends AppCompatActivity {
        private Button messageBtn;
    
        @Override
        public void onCreate( Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_send);
    
            messageBtn=findViewById(R.id.message_btn);
            messageBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent=new Intent("zhifubao");
                    sendBroadcast(intent);
                }
            });

    受信者MainActivity:変更せずに新しいMyReceivedivediverエンティティークラスを作成:
    public class MyReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(context, "    ", Toast.LENGTH_SHORT).show();
            }

    AndroidManifest追加:
    <receiver android:name=".MyReceiver">
                    <action android:name="zhifubao"/>
                intent-filter>
            receiver>

    ダイナミックレジストリ無秩序ブロードキャスト


    送信側は変更しない
    受信者
    以前AndroidManifestが追加した削除を、MainActivityを変更せずに以前のベースで受信者を変更
    public class MainActivity extends AppCompatActivity {
        private MyReceiver receiver;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            //    
            receiver = new MyReceiver();
            IntentFilter filter = new IntentFilter();
            filter.addAction("zhifubao");
            //         
            registerReceiver(receiver, filter)

    静的レジストリ順序付きブロードキャスト


    受信者に新しいエンティティークラスMyReceiverを作成
    送信者:SendActivity:
    public class SendActivity extends AppCompatActivity {
        private Button messageBtn;
        private Button messageBtn2;
    
        @Override
        public void onCreate( Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_send);
    
            messageBtn=findViewById(R.id.message_btn);
            messageBtn2=findViewById(R.id.message2_btn);
            messageBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent=new Intent("zhifubao");
                    sendBroadcast(intent);
                }
            });
            //      
            messageBtn2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent=new Intent("zhifubao");
                    //       
                    sendOrderedBroadcast(intent,null);//     
                }
            });
        }
    

    受信者
    AndroidManifest追加:
     <receiver android:name=".MyReceiver">
                <intent-filter android:priority="1000"> //      
                    <action android:name="zhifubao"/>
                intent-filter>
            receiver>
    
            <receiver android:name=".MyReceiver2">
                <intent-filter android:priority="-1000">//      
                    <action android:name="zhifubao"/>
                intent-filter>
            receiver>

    MyReceiver:
    public class MyReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(context, "    ", Toast.LENGTH_SHORT).show();
            }

    MyReceiver2:
    public class MyReceiver2 extends BroadcastReceiver{
        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(context, "  2    ", Toast.LENGTH_SHORT).show();
            }

    動的登録規則放送


    送信側は変更しない
    受信者:
    AndroidManifest以前に追加されたすべてのマスク
    MainActivity:
    public class MainActivity extends AppCompatActivity {
        private MyReceiver receiver;
        private MyReceiver2 receiver2;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            //    
            receiver = new MyReceiver();
            IntentFilter filter = new IntentFilter();
            filter.addAction("zhifubao");
            //      ,                     
            filter.setPriority(1000);//      
            //         
            registerReceiver(receiver, filter);
    
            receiver2=new MyReceiver2();
            IntentFilter filter1=new IntentFilter();
            filter1.addAction("zhifubao");
            //      ,                     
            filter.setPriority(-1000);//      
            //         
            registerReceiver(receiver2,filter1);
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            unregisterReceiver(receiver);
        }
    }

    MyReceiver:
    public class MyReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(context, "    ", Toast.LENGTH_SHORT).show();
            Log.e("MyReceiver","1111111111111");//           
            abortBroadcast();//       MyReceiver2
        }
    }

    MyReceiver2:
    public class MyReceiver2 extends BroadcastReceiver{
        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(context, "  2    ", Toast.LENGTH_SHORT).show();
            Log.e("MyReceiver2","22222222222");//           
        }
    }