我们在接收短信和电话时,手机通常要进行信息传输,这里用到的就是广播,广播在手机传输信息时用的特别广泛,我们可以通过广播来监听短信,电量或者信号等。
应用Broadcast主要是分为两步,第一步是发送广播,这里用到的是sendBroadcast,第二步是接收广播,这里用到的是onReceive()方法,这里就详细讲一下。
首先我们在主Activity里面要发送广播,这里的Intent表示把发送的信息和过滤的对象放在Intent对象里面,方便接收广播时处理。
public class MainActivity extends Activity implements OnClickListener{
private final static String MY_ACTION="com.example.mybroadcast.ACTION";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.btn).setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn:
Intent intent=new Intent(MY_ACTION);
intent.putExtra("data", "你发送了广播...");
sendBroadcast(intent);//发送普通广播
break;
default:
break;
}
}
}
然后我们自定义一个接收广播的类MyReceiver ,它要继承BroadcastReceiver ,然后重写onReceive方法接收广播,若是发过来的信息与IntentFilter一致,则把Intent对象里的数据取出来即可。
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String data=intent.getStringExtra("data");
Toast.makeText(context, data, Toast.LENGTH_LONG).show();
}
}
最后我们要在xml文件里对广播接收进行配置一下,还要配置一下过滤器,指明广播对哪一类的信息进行接收。
<receiver
android:name="com.example.mybroadcast.MyReceiver">
<intent-filter>
<action android:name="com.example.mybroadcast.ACTION"/>
</intent-filter>
</receiver>
还有一种动态注册的方式,使用Java代码实现。但这种方式必须要启动activity才可以,当当前的context销毁时,Broadcast对象也就自动销毁了。
private SmsReceiver receiver;
protected void onStart() {
receiver=new SmsReceiver();
IntentFilter filter=new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
filter.setPriority(1000);
registerReceiver(receiver, filter);
}