概述:
BroadcastReceiver需要注册,有静态注册和动态注册两种方式。
代码:
首先,需要建立一个自定义广播,继承于BroadcastReceiver,必须实现onReceive()方法
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context,"我收到了广播",Toast.LENGTH_SHORT).show();
}
}
主活动
public class MainActivity extends Activity implements View.OnClickListener{
private Button mButtonSend;
private Button mButtonAlarm;
private Button mButtonAlarmCancel;
private MyReceiver mMyReceiver;
private AlarmManager mAlarmManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//动态注册方式
mMyReceiver = new MyReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction("com.myreceiver.test");
registerReceiver(mMyReceiver, filter);
//得到ALARM_SERVICE服务
mAlarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
mButtonSend = (Button) findViewById(R.id.button_send);
mButtonAlarm = (Button) findViewById(R.id.button_alarm);
mButtonAlarmCancel = (Button) findViewById(R.id.button_alarm_cancel);
mButtonSend.setOnClickListener(this);
mButtonAlarm.setOnClickListener(this);
mButtonAlarmCancel.setOnClickListener(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(mMyReceiver);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.button_send:
sendBroadcast();
break;
case R.id.button_alarm:
startAlarm();
break;
case R.id.button_alarm_cancel:
stopAlarm();
break;
default:
break;
}
}
/**
* 停止定时闹钟服务
*/
private void stopAlarm() {
Intent intent = new Intent();
intent.setAction("com.myreceiver.test");
PendingIntent pi = PendingIntent.getBroadcast(getApplicationContext(),0x23,intent,PendingIntent.FLAG_UPDATE_CURRENT);
mAlarmManager.cancel(pi);
}
/**
* 启动一个定时闹钟,4秒后触发,通过Toast呈现消息,每3秒发起一次Toast消息提示
*/
private void startAlarm() {
Intent intent = new Intent();
intent.setAction("com.myreceiver.test");
PendingIntent pi = PendingIntent.getBroadcast(getApplicationContext(),0x23,intent,PendingIntent.FLAG_UPDATE_CURRENT);
mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis()+4000,3000,pi);
}
/**
* 发送一个广播
*/
private void sendBroadcast() {
Intent intent = new Intent();
intent.setAction("com.myreceiver.test");
sendBroadcast(intent);
}
}
布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/button_send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Send Broadcast"/>
<Button
android:id="@+id/button_alarm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="启动闹钟"/>
<Button
android:id="@+id/button_alarm_cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="取消闹钟"/>
</LinearLayout>
静态注册方法在manifests中完成,不要和动态注册重复
<receiver android:name=".broadcast.MyReceiver">
<intent-filter>
<action android:name="com.myreceiver.test"/>
</intent-filter>
</receiver>
结果演示: