首页 > 系统 > Android > 正文

学习Android广播小结

2019-11-09 17:51:35
字体:
来源:转载
供稿:网友

最近在网上学习了关于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; } } 方法是一样的。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表