学习Android广播小结
2017-02-07 15:18
441 查看
最近在网上学习了关于Android广播这个技术点,下面我将我了解得分享给大家,不喜勿喷哦!
广播这个东西很好了解吧!现实中就有很多这样的例子,我就不一一说了。
广播有很多种:自定义广播(动态广播 静态广播 无序广播 有序广播)黏性广播(已过时) 系统广播等等,广播有发送者就有接收者,而且不能超出一个范围(举个例子:同一部手机),主要用到 Intent传值接收值 。
自定义广播就是自己发自己收,新建两个Module 项目,一个作为发送者,一个作为接收者。广播发送者得到Intent,给自己去一个名字。写入你需要的值, sendBroadcast(intent) 发送出去。广播接收者就是在项目新建一个类继承于BroadcastReceiver,重写它的方法(就一个),判断你得到广播名字是否和发送者的一致,然后打印,但是还没完,还需要配置一下。配置有两种方式:清单文件配置(AndroidManifest) java代码配置。
java代码配置:
我用的是清单文件配置:
//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;
}
}
方法是一样的。
广播这个东西很好了解吧!现实中就有很多这样的例子,我就不一一说了。
广播有很多种:自定义广播(动态广播 静态广播 无序广播 有序广播)黏性广播(已过时) 系统广播等等,广播有发送者就有接收者,而且不能超出一个范围(举个例子:同一部手机),主要用到 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;
}
}
方法是一样的。
相关文章推荐
- Android解惑 - 为什么要用Fragment.setArguments(Bundle bundle)来传递参数
- Android apk信息获取管理和手机信息获取管理
- Android Vector
- Android Screen Monitor 将真机屏幕同步到PC
- 设备分享-腾讯优测
- Android Bander设计与实现 - 设计篇
- Android属性动画完全解析(下),Interpolator和ViewPropertyAnimator的用法
- android的Binder框架
- android5.0.1源代码下载链接
- Android 中AES加密举例
- Android Studio 加载 .so库出现couldn't find "*.so"
- Android APK反编译就这么简单 详解(附图)
- Android底部和标签导航栏—TabLayout+Fragment
- android 模拟点击view事件
- Android 自定义ViewGroup
- 开源项目- Lottie 简介
- Android中listview和imageview实现条目单选效果
- 说说关于Android使用Gson解析Json所需实体类的那些事~
- AsyncTask异步任务 android
- Android 通知栏Notification的整合 全面学习 (一个DEMO让你完全了解它)