学习Android广播小结

来源:互联网 发布:淘宝官网首页登录 编辑:程序博客网 时间:2024/05/12 04:11

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

private MyReceived01 myReceived01;private IntentFilter intentFilter;@Overrideprotected 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代码配置@Overrideprotected void onResume() {    super.onResume();    //动态注册广播    registerReceiver(myReceived01,intentFilter);}@Overrideprotected 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
原创粉丝点击