Android四大组件之一——Broadcast Receiver
:###广播接收器:可以响应和监听系统事件,也可手动启动
①简单手动启动代码:
(1)MyReceiver:
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String msg = intent.getStringExtra("msg");
Toast.makeText(context, msg, 1111).show();
}
}
(2)AndroidManifest.xml(注册广播接收器与注册Activity异曲同工)
<receiver android:name="broadcast_recevier1.MyReceiver" ></receiver>
(3)MainActivity:
public class MainActivity extends Activity {
private Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button) findViewById(R.id.button1);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent();
i.setClass(MainActivity.this, MyReceiver.class);
i.putExtra("msg", "发送给广播接收器的信息");
sendBroadcast(i);
//发送intent到广播接收器
}
});
}
}
②系统广播事件(自动):
(1)MyAutoReciver:
public class MyAutoRecevier extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "自动广播已运行", 1111).show();
Log.i("po", "自动广播已运行");
}
}
(2)AndroidManifest.xml(注意与第一种广播的注册方式的不同,关于intent-filter的使用后面再做详细的介绍):
<receiver android:name="broadcast_recevier1.MyAutoRecevier" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
以上代码是系统启动时广播就可以执行,但是我在测试的时候结果不理想。
intent-filter:
Intent过滤器:以我的理解来看,手机发生的所有action(动作)都有对应的常量值,例如android.intent.action.BOOT_COMPLETED是系统启动完成的action常量值。当符合intent-filter中设置的action的常量值,则就执行相应的广播。
一些标准广播Action常量:
常量值 意义
android.intent.action.BOOT_COMPLETED 系统启动
android.intent.action.ACTION_TIME_CHANGED 时间改变
android.intent.action.ACTION_DATE_CHANGED 日期改变
android.intent.action.ACTION_TIMEZONE_CHANGED 时区改变
android.intent.action.ACTION_BATTERY_LOW 电量低
android.intent.action.ACTION_MEDIA_EJECT 插入或拔出外部媒体
android.intent.action.ACTION_MEDIA_BUTTON 按下多媒体键
android.intent.action.ACTION_PACKAGE_ADDED 添加包
android.intent.action.ACTION_PACKAGE_REMOVED 删除包
还没有评论,来说两句吧...