Android 广播接收者
安卓实现广播有两种方式
方式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配置的广播接收者在任何时候都生效,即使应用被关闭。
是不是很简单,小伙伴们来试一试。