广播接收者


广播接收者案例_ip拨号器
  定义一个类继承broadcastReceiver 
  
  
  
  1. public class OutGoingCallReceiver extends BroadcastReceiver {
  2. //当接收到外拨电话的事件的时候 这个方法就会执行
  3. @Override
  4. public void onReceive(Context context, Intent intent) {
  5. //[0]获取用户保存的ipnumber
  6. SharedPreferences spPreferences = context.getSharedPreferences("config", 0);
  7. String ipNumber = spPreferences.getString("ipnumber", "");
  8. //[1]获取当前拨打的号码
  9. String currentNumber = getResultData();
  10. //[2]判断一下是否以0开头 然后在去加上17951
  11. if (currentNumber.startsWith("0")) {
  12. //修改拨打的电话号码
  13. setResultData(ipNumber+currentNumber);
  14. }
  15. }
  16. }
在清单文件里面配置 
  
  
  
  1. <receiver android:name="com.itheima.ipdail.OutGoingCallReceiver">
  2. <intent-filter >
  3. <action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
  4. </intent-filter>
  5. </receiver>

mainActivity的逻辑 主要是保存ip号码
  
  
  
  1. //[1]获取number
  2. String ipNumber = et_number.getText().toString().trim();
  3. //[2]把ipnumber存起来 获取sp实例
  4. SharedPreferences sp = getSharedPreferences("config", 0);
  5. //[2.1]获取sp的编辑器
  6. sp.edit().putString("ipnumber", ipNumber).commit();
  7. Toast.makeText(getApplicationContext(), "保存成功", 1).show();

  
  
  
 

3 广播接收者案例_sd卡状态监听
  [1]定义广播接收者
  
  
  
  1. public class SdcardReceiver extends BroadcastReceiver {
  2. //当sd卡状态发生改变的时候调用
  3. @Override
  4. public void onReceive(Context context, Intent intent) {
  5. //获取当前广播的事件类型
  6. String action = intent.getAction();
  7. if ("android.intent.action.MEDIA_MOUNTED".equals(action)) {
  8. System.out.println("sd卡挂载了");
  9. }else if ("android.intent.action.MEDIA_UNMOUNTED".equals(action)) {
  10. System.out.println("说明sd卡卸载了");
  11. }
  12. }
  13. }
  [2]在清单文件里面配置一下
  
  
  1. <receiver android:name="com.itheima.sdcardstate.SdcardReceiver">
  2. <intent-filter >
  3. <action android:name="android.intent.action.MEDIA_MOUNTED"/>
  4. <action android:name="android.intent.action.MEDIA_UNMOUNTED"/>
  5. <data android:scheme="file"/>
  6. </intent-filter>
  7. </receiver>



4 广播接收者案例_短信监听器
  [1]定义一个类继承broadCastReceiver
  
  
  
  1. public class SmsReceiver extends BroadcastReceiver {
  2. //当短信到来就会执行这个方法
  3. @Override
  4. public void onReceive(Context context, Intent intent) {
  5. // 获取发送短信的号码 和 内容
  6. Object[] objects = (Object[])intent.getExtras().get("pdus");
  7. for (Object object : objects) {
  8. //创建smsmessage的实例
  9. SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) object);
  10. String body = smsMessage.getMessageBody();
  11. String address = smsMessage.getOriginatingAddress();
  12. System.out.println("body:"+body+"----"+address);
  13. }
  14. }
  15. }
[2]在清单文件进行配置
  
  
  1. <receiver android:name="com.itheima.smslistener.SmsReceiver" >
  2. <intent-filter>
  3. <action android:name="android.provider.Telephony.SMS_RECEIVED" />
  4. </intent-filter>
  5. </receiver>



5 不同版本广播的特点
  [1]4.0之后 谷歌为了安全考虑 在设置页面多了一个强行停止的按钮 如果应用被强行停止 那么广播就不生效
  [2]4.0之后 要求第一次安装的时候必须要有界面 没有界面广播接收者是不生效的  
  [3]2.3的手机是没有上面这样安全设计 
  [4]4.4系统短信监听事件不生效.  


6 广播接收者案例_卸载安装 
 [1]定义一个广播接收者    
  
  
  1. public class AppStateReceiver extends BroadcastReceiver {
  2. //当 应用被卸载 或者安装的时候调用
  3. @Override
  4. public void onReceive(Context context, Intent intent) {
  5. System.out.println("嘻嘻");
  6. //获取当前广播的事件类型
  7. String action = intent.getAction();
  8. if ("android.intent.action.PACKAGE_ADDED".equals(action)) {
  9. System.out.println("shuoming 应用被安装了:"+intent.getData());
  10. }else if ("android.intent.action.PACKAGE_REMOVED".equals(action)) {
  11. System.out.println("说明应用被卸载了");
  12. }
  13. }
  14. }
[2]在清单文件里面配置一下
  
  
  1. <receiver android:name="com.itheima.appstate.AppStateReceiver">
  2. <intent-filter >
  3. <action android:name="android.intent.action.PACKAGE_ADDED"/>
  4. <action android:name="android.intent.action.PACKAGE_REMOVED"/>
  5. <data android:scheme="package"/>
  6. </intent-filter>
  7. </receiver>



7 广播接收者案例_开机启动
   11-09 03:49:29.357: E/AndroidRuntime(1129): java.lang.RuntimeException: Unable to start receiver com.itheima.boot.BootReceiver: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?


8 有序广播和无序广播
  无序广播:类似新闻联播 每天晚上7点准时开播  sendBroadcast(Intent intent) 解耦  软件工程
  有序广播:按照一定的优先级 接收广播 
  
  有序广播可以被拦截 数据可以被修改 
  无序广播不可以被拦截 数据不可以被修改 


9 特殊广播接收者
  操作特别频繁的广播事件  在清单文件注册无效 
  注册广播接收者有2种方式 
  [1]第一种方式就是在清单文件里面注册 
  [2]通过代码的方式去注册

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值