BroadcastReceiver

1.什么是广播

广播是Android四大组件之一;
广播分为发送方和接受方,就算没有接受方,发送方页会发送数据;
广播不仅可以实现跨多个页面的数据通信,还可以实现跨进程的数据通信。

2.广播的分类

无序广播:所有监听的接收者都能收到;(打个比方就是所有听收音机的人都能听到)
有序广播:优先级高的先接收;如果不终止往下传递。(比如广电先审核,在播放广播)
粘滞广播:当广播发出后会一直等到接受者接受为止。

3.启动广播的方式(与广播分类勿混淆)

1.静态注册广播:
新建类继承BroadcastReceiver;
在Android Manifest里注册:
     <receiver android:name=".Broad">
            <intent-filter>
                //自定义Action
                <action android:name="MLY" />
            </intent-filter>
        </receiver>
在context环境发送广播


2.动态注册广播:
新建类继承BroadcastReceiver;
在Activity中动态注册:
        receiver = new MyReceiver();
        IntentFilter filter=new IntentFilter();
        filter.addAction("zhifu");
        filter.setPriority(100);
        registerReceiver(receiver, filter);

4.静态与动态注册无序列表

静态:
Activity中:
public class MainActivity extends AppCompatActivity {
    private Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button=findViewById(R.id.btn1);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            //MLY为注册的Action的name
                Intent intent = new Intent("MLY");
                sendOrderedBroadcast(intent,null);
            }
        });
    }
}
创建类继承BroadcastReceiver
public class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "BroadcastReceiver ", Toast.LENGTH_LONG).show();
        Log.e("MyReceiver","11111111");
    }
}
在Android Manifest:
 <receiver android:name=".MyReceiver ">
            <intent-filter>
                //自定义Action
                <action android:name="MLY" />
            </intent-filter>
        </receiver>
2.动态:
Activity中:
public class MainActivity extends AppCompatActivity {
    private Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button=findViewById(R.id.btn1);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent("zhifu");
                sendOrderedBroadcast(intent,null);
            }
        });
    }
}
创建类继承BroadcastReceiver
public class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "MyReceiver", Toast.LENGTH_LONG).show();
        Log.e("MyReceiver","11111111");
    }
}
另一个Poject中的Activity:
package com.example.mod;

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

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("zhifu");
        registerReceiver(receiver, filter);

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
       unregisterReceiver(receiver);

    }
}

5.静态与动态注册有序广播

1.静态注册有序广播:
在Activity中设置点击发送广播:
public class MainActivity extends AppCompatActivity {
    private Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button=findViewById(R.id.btn1);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            //MLY为注册的Action的name
                Intent intent = new Intent("MLY");
                sendOrderedBroadcast(intent,null);
            }
        });
    }
}
在接受项目中创建两个类继承BroadcastReceiver,并且可以在类中判断是否要继续广播下去
如果不就执行abortBroadcast
public class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "MyReceiver", Toast.LENGTH_LONG).show();
        Log.e("MyReceiver","11111111");
    }
}
public class MyyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "receiver", Toast.LENGTH_SHORT).show();
        Log.e("MyReceiver","22222222");
    }
}
关键点:分别在注册时进行优先级判断:
  <receiver android:name=".MyReceiver ">
        //设置优先级-1000~1000
            <intent-filter android:priority="1000">
                //自定义Action
                <action android:name="MLY" />
            </intent-filter>
        </receiver>
  <receiver android:name=".MyyReceiver ">
        //设置优先级-1000~1000
            <intent-filter android:priority="100">
                //自定义Action
                <action android:name="MLY" />
            </intent-filter>
        </receiver>
2.动态注册有序广播:
    在Activity中设置点击发送广播:
public class MainActivity extends AppCompatActivity {
    private Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button=findViewById(R.id.btn1);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            //zhifu为注册的Action的name
                Intent intent = new Intent("zhifu");
                sendOrderedBroadcast(intent,null);
            }
        });
    }
}
在接受项目中创建两个类继承BroadcastReceiver,并且可以在类中判断是否要继续广播下去
如果不就执行abortBroadcast
public class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "别挣扎了,hhh", Toast.LENGTH_LONG).show();
        Log.e("MyReceiver","11111111");
    }
}
public class MyyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "receiver", Toast.LENGTH_SHORT).show();
        Log.e("MyReceiver","22222222");
    }
}
在令一个project中Activity动态注册:
使用 filter.setPriority(100)设置优先级;
public class MainActivity extends AppCompatActivity {
    private MyReceiver receiver;
    private MyyReceiver receiver2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        receiver = new MyReceiver();
        IntentFilter filter=new IntentFilter();
        filter.addAction("zhifu");
        filter.setPriority(100);
        registerReceiver(receiver, filter);

        receiver2 =new MyyReceiver();
        IntentFilter filter1=new IntentFilter();
        filter1.addAction("zhifu");
        filter1.setPriority(1000);
        registerReceiver(receiver2, filter1);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
       unregisterReceiver(receiver);
       unregisterReceiver(receiver2);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值