安卓实现广播有两种方式

方式1:动态注册

方式2:配置文件注册

 

下面我们来实现方式1,动态注册

首先我们来定义一个接收者,继承BroadcastReceiver ,并且重写onReceive方法,当指定的广播发出,系统自动调用onReceive方法。

public class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent)
    {
        //得到广播中传递的数据
        String data = intent.getStringExtra("data");
        Log.i("shxtapp","接收到数据:"+data);
    }
}

接下来我们注册这个广播接收者,这里我们指定了广播的action是"setAction",只有系统发出这个广播,才能被我们接收。

MyReceiver receiveBroadCast = new MyReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction("setAction"); //只有持有相同的action的接受者才能接收此广播
registerReceiver(receiveBroadCast, filter);
Log.i("shxtapp","注册接收者完毕");

 

接下来我们模拟发出广播

Intent intent = new Intent();  //Itent就是我们要发送的内容
intent.putExtra("data", "传递的数据");
intent.setAction("setAction");
//设置你这个广播的action,只有和这个action一样的接受者才能接受者才能接收广播
sendBroadcast(intent);   //发送广播
 Log.i("shxtapp","发送完毕");

当我们发出广播,我们定义的广播接收者就接到我们的广播,并且能够获取到我们传递的数据。


 

方式2:配置文件注册

接下来我们试一试,如何同通过配置文件来注册一个广播接收者

同样的,还是先定义一个广播接收者,这一次我们接收系统打电话的广播信息。

public class MyReceiver2 extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        String phoneNumber = getResultData();//获取电话号码
        Log.i("shxtapp", "call OUT:" + phoneNumber);

    }
}

 

然后再AndroidManifest.xml文件中做如下配置,在application标签中,和activity同级即可。

<receiver android:name="com.ccshxt.shxt.MyReceiver2">
            <intent-filter>
                <action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
            </intent-filter>
</receiver>

该配置指定这个广播接收者接收向外呼叫的电话的广播,即打电话的时候系统发出广播,我们就能接收到了。

同时我们要配置权限<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>,没有权限就不能进行电话相关的操作了。

 

这两种方法定义的广播接收者都能接受指定的广播,但有些不同。

方法1动态注册的广播接收者只能在应用激活的时候生效,如果应用被关闭则不起作用。

方法2配置的广播接收者在任何时候都生效,即使应用被关闭。

是不是很简单,小伙伴们来试一试。