广播接受者BoradCastRevier,接收系统消息
概念:
两种注册方式
广播接受优先级
两种方式
广播接受者概念:
- 分类:
- 无序广播
- 无论广播接收者的优先级是什么,所有的广播接收者都能同时接收到,不可以被拦截
- **有序广播**
- 按照广播接受者的优先级去优先接收,可以被拦截(短信接收,电话来电)
- 广播注册
- 在清单文件中注册,静态注册,永久生效
- 在Activity中注册,动态注册
- 广播优先级的优先级:
- google推荐的优先级范围(-1000–1000)
- 生命周期特别短
案例_IP
步骤
- 定义一个类继承系统提供的BroadCastReceiver类,
- 复写OnReceiver()方法
``` @Override public void onReceive(Context context, Intent intent) { //收到广播就会回调这个方法 Log.i("hhh", "收到新广播"+intent); // 获取传过来的号码 String num = getResultData(); //获取存在sd卡中的数据 SharedPreferences sp = context.getSharedPreferences("config", context.MODE_PRIVATE); String inpNum = sp.getString("inpNum", ""); //将新号码设置出去 setResultData(inpNum+num); } ```
注册广播
在清单文件中配置
<receiver android:name="com.example.w_ip.Mybroad"> <intent-filter > <action android:name="android.intent.action.NEW_OUTGOING_CALL"/>//接收的广播类型 </intent-filter> </receiver>
添加权限
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
在MianActivity中设置号码,并且第二次打开时会回显IP号码
“`//回显数据 sp = getSharedPreferences("config", MODE_PRIVATE); String inpNumsString = sp.getString("inpNum", ""); ed_num.setText(inpNumsString); } //保存设置的IP号 public void saveAndExit(View v){ String inpNum = ed_num.getText().toString().trim(); sp.edit().putString("inpNum", inpNum).commit(); Toast.makeText(this, "数据保存成功:"+inpNum, Toast.LENGTH_SHORT).show(); //退出当前Activity finish(); } ```
==注意:
使用广播接收者时,只要在清单文件注册了广播,即使应用程序退出了,当接收到广播事件后系统会自动把应用程序重启并处理广播事件==
案例-监听网络状态改变
广播可以实现友方唤醒
案例-监听开机启动
如何在广播接受者中启动Activity?
context.start(new Intent(context,MainActivity));
常见异常