面试准备(一) 注册广播有哪几种方式,有什么区别

 

BroadcastReceiver用于监听被广播的事件

必须被注册,有两种方法:

1、在应用程序的代码中注册

注册BroadcastReceiver:

registerReceiver(receiver,filter);

取消注册BroadcastReceiver:

unregisterReceiver(receiver);

当BroadcastReceiver更新UI,通常会使用这样的方法注册。启动Activity时候注册BroadcastReceiver,Activity不可见时候,取消注册。

2、在androidmanifest.xml当中注册

<receiver>

    <intent-filter>

     <action android:name = "android.intent.action.PICK"/>

    </intent-filter>

</receiver>

 

1)第一种不是常驻型广播,也就是说广播跟随程序的生命周期。

2)第二种是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行。

 

使用这样的方法注册弊端:它会始终处于活动状态,毕竟是手机开发,cpu和电源资源比较少,一直处于活动耗费大,不利。

 

 

动态注册一个SD卡事件监听:

 

  SdcardStateChanageReceiver sdcardStateReceiver;   
@Override  
protected void onCreate(Bundle savedInstanceState)   
{   
 super.onCreate(savedInstanceState);   
 IntentFilter filter = new IntentFilter();   
 filter.addAction(Intent.ACTION_MEDIA_REMOVED);   
 filter.addAction(Intent.ACTION_MEDIA_EJECT);   
 filter.addAction(Intent.ACTION_MEDIA_MOUNTED);   
 filter.addDataScheme("file");   
 sdcardStateReceiver = new SdcardStateChanageReceiver();    
 registerReceiver(sdcardStateReceiver,filter);   
}   
@Override  
protected void onDestroy(){   
 unregisterReceiver(sdcardStateReceiver);   
}   
class SdcardStateChanageReceiver  extends BroadcastReceiver{   
  
 @Override  
 public void onReceive(Context context, Intent intent)   
 {   
  String state=android.os.Environment.getExternalStorageState();   
  System.out.println("SDCard 发生改变! 状态:"+state);   
  //checkSDCard();   
 }   
 public void checkSDCard(){   
  String state=android.os.Environment.getExternalStorageState();   
  System.out.println(state);   
  if(state.equals(android.os.Environment.MEDIA_REMOVED ) || state .equals(android.os.Environment.MEDIA_UNMOUNTED)){   
   System.out.println("SDCard 已卸载!");   
  }   
 }   
}   

 

转载于:https://www.cnblogs.com/AceIsSunshineRain/p/5182795.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值