学习Android广播小结

最近在网上学习了关于Android广播这个技术点,下面我将我了解得分享给大家,不喜勿喷哦!
广播这个东西很好了解吧!现实中就有很多这样的例子,我就不一一说了。
广播有很多种:自定义广播(动态广播 静态广播 无序广播 有序广播)黏性广播(已过时) 系统广播等等,广播有发送者就有接收者,而且不能超出一个范围(举个例子:同一部手机),主要用到 Intent传值接收值 。
自定义广播就是自己发自己收,新建两个Module 项目,一个作为发送者,一个作为接收者。广播发送者得到Intent,给自己去一个名字。写入你需要的值, sendBroadcast(intent) 发送出去。广播接收者就是在项目新建一个类继承于BroadcastReceiver,重写它的方法(就一个),判断你得到广播名字是否和发送者的一致,然后打印,但是还没完,还需要配置一下。配置有两种方式:清单文件配置(AndroidManifest) java代码配置。
java代码配置:

private MyReceived01 myReceived01;
private IntentFilter intentFilter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    TextView r1_main_text= (TextView) findViewById(R.id.r1_main_text);
    Intent intent=new Intent();
    String data=intent.getStringExtra("data");
    r1_main_text.setText(data);
    //new一个接受者
    myReceived01 = new MyReceived01();
    //new一个intent过滤器
    intentFilter = new IntentFilter();
    //给intent过滤器增加行为
    intentFilter.addAction("com.example.yang_broadcastsender.1211");
}
//动态广播 用java代码配置

@Override
protected void onResume() {
    super.onResume();
    //动态注册广播
    registerReceiver(myReceived01,intentFilter);
}

@Override
protected void onDestroy() {
    super.onDestroy();
    //注销广播 unregisterReceiver
    unregisterReceiver(myReceived01);
}

我用的是清单文件配置:


//name就是广播名字



这样就可以了。
还有就是动态广播和静态广播,它们性质都是一样的,有三点不同:动态广播用代码配置, 静态广播用清单文件配置,而且动态广播的优先级必静态广播要高, 最后一个就是作为接收者一方,动态广播退出程序就接收不到广播,这个可以用黏性广播解决:
/**发送黏性广播
* 动态广播退出程序就销毁了接受不了广播
* 用黏性广播可以做到 离线接受
*/
sendStickyBroadcast(intent);
静态广播都可以接受。
系统广播就有很多了,具体亲们可以去网上下个广播大全,有相对应的名字,我这里就做了一个电话监听:
if (“android.intent.action.PHONE_STATE”.equals(intent.getAction())){
//获取电话号码
String phone=intent.getStringExtra(“incoming_number”);
Log.i(“test”,”有电话进来了,”+phone);
//获取电话管理者
TelephonyManager manager= (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
//得到电话的状态
int s=manager.getCallState();
switch (s) {
case TelephonyManager.CALL_STATE_RINGING:
Log.i(“tt”,”电话打入:”+phone);
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Log.i(“tt”,”电话接通:”+phone);
break;
case TelephonyManager.CALL_STATE_IDLE:
Log.i(“tt”,”电话挂断:”+phone);
break;
}
}
方法是一样的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值