简单 易懂的了解android中的Broadcast Receiver

来源:互联网 发布:手机dts音乐播放软件 编辑:程序博客网 时间:2024/05/22 03:36

写这篇博客的目的首先偶是预防以后自己忘了可以随时拿出来看,其次 能帮到一些人也是不错的..
1.android中的广播分为:
标准广播
特点: 广播发出后所有的接收器都可以 同时 接收到 广 播, 而且无法拦截

有序广播
特点:广播发出之后,接收者有先后之分,并且前面的接收者可以拦截广播,导致后面的接收的接收不到


2.广播是通过一方发送另一方接收的,发送的一方只需要给Intent一个意图,像”com.xu.text”,然后调用sendBroadcast(intent)方法就可以了(有序广播调用sendOrderedBroadcast(intent,null);),接收广播者(让一个类继承BroadcastReceiver,然后实现BroadcastReceiver的onReceice()方法即可,广播内容在该方法中操作)


3.广播有俩种注册方式:
静态注册(AndroidManifest.xml中)
动态注册(代码实现)

动态注册:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {    private Button button;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        button= (Button) findViewById(R.id.btn);        button.setOnClickListener(this);    }    @Override    public void onClick(View v) {        Intent intent=new Intent("com.example");         sendBroadcast(intent);    }}

这里通过点击Button发送一条广播,发送广播的代码很简单,

 Intent intent=new Intent("com.example");  sendBroadcast(intent);

前面讲了

接收广播:
在另一个Module的Activity中:

public class MainActivity extends AppCompatActivity {    private IntentFilter intentFilter;    private BroadcastTest broadcast;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        intentFilter=new IntentFilter();        //选择要接收哪个广播  意图添加进去,保持一致        intentFilter.addAction("com.example");        broadcast=new BroadcastTest();        registerReceiver(broadcast,intentFilter);    }    @Override    protected void onDestroy() {        super.onDestroy();        unregisterReceiver(broadcast);    }    class BroadcastTest extends BroadcastReceiver{        @Override        public void onReceive(Context context, Intent intent) {            Toast.makeText(context, "收到其他应用的广播",              Toast.LENGTH_SHORT).show();        }    }}

registerReceiver();方法用来接收广播,里面需要俩个参数,一个BroadcastReceiver,一个IntentFilter,把这俩个对象传进去..广播的内容会在BroadcastReceiver执行具体处理,动态注册要记得取消注册广播,在onDestory()中 unregisterReceiver(broadcast);取消注册


静态注册:

在AndroidManifest.xml中,

 <receiver      android:name=".MyReceiver"      android:enabled="true"      android:exported="true">      <intent-filter>         <action android:name="com.example"/>      </intent-filter> </receiver>

enabled表示是否允许启用这个广播接收器
exported表示是否允许接收本应用程序以外的广播 true表示允许
在android studio中可以点击file–new–Other—BraodcastReceiver直接创建一个广播接收者,AndroidManifest.xml中只需要把

<intent-filter>         <action android:name="com.example"/>      </intent-filter>

意图写出来就可以了,发送方和动态一样…

原创粉丝点击