Android 第五课时 by姚鑫
2020-01-17 14:45:33 6 举报
AI智能生成
Andorid
作者其他创作
大纲/内容
Broadcast Receiver
简介
android广播机制就是在Android中,有一些操作完成以后,会发送广播,比如说发出一条短信,或打出一个电话,如果某个程序接收了这个广播,就会做相应的处理。
类似于一种观察者模式
类型
标准广播
特点
是一种完全异步执行的广播
在广播发出之后,所有的广播接收器同时接收到这个广播
没有先后顺序
效率高,无法被截断
使用
定义类继承BroadcastReceiver用于接收广播
AndroidManifest中注册广播,增加intent filter
发送广播
有序广播
特点
同步执行的广播
在广播发出之后,同时只会有一个广播接收器收到这条广播
当这个广播接收器处理完之后,继续传递
有先后顺序
优先级高的先接收广播
使用
sendOrderedBroadcast(intent, null);
第一参数Intent
第二参数与权限相关的字符串,null就可以
在AndroidManifest中间修改intent-filter属性
android:priority="100"
注册
静态注册
代码中注册
动态注册
AndoridManifest中注册
接收广播
继承BroadcastReceiver
重写onReceive()方法
使用
监听网络变化
创建一个内部类继承BroadcastReceiver,重写onReceiver
添加权限 android.permission.ACCESS_NETWORK_STATE
ConnectivityManager
是一个系统服务类,专门用于管理网络
添加网络监听监听码
mIntentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
注册广播
取消注册
静态注册开机启动
action
android.intent.action.BOOT_COMPLETED
开机
android.intent.action.ACTION_SHUTDOWN
关机
category
android.intent.category.LAUNCHER
Exported
表示是否允许这个广播接收器接收本程序以外的广播
Enabled
表示是否启用这个广播接收器
本地广播
为什么要用本地广播
前面介绍的都是全局广播,可以被任何应用程序接收到,我们也可以接收其他应用程序的广播,有安全问题
使用LocalBroadcastManager
用法和使用静态注册广播一样
使用后其他程序无法接收到此广播
优点
可以明确知道正在发送的广播不会离开我们的程序,因此不会担心机密数据泄漏
其他的程序无法将广播发送大我们程序内部,因此不需要担心会有安全漏洞的隐患
发送本地广播比发送系统全局广播讲会更加高效
系统广播
屏幕操作相关
Intent.ACTION_REBOOT
重启设备时的广播
Intent.ACTION_SCREEN_OFF
屏幕被关闭之后的广播
Intent.ACTION_SCREEN_ON
屏幕被打开之后的广播
Intent.ACTION_BOOT_COMPLETED
在系统启动完成后,这个动作被广播一次(只有一次)
Intent.ACTION_CLOSE_SYSTEM_DIALOGS
当用户按下电源按钮,长按或短按(不管有没跳出话框),进行锁屏时,android系统都会广播此Action消息
电池相关
Intent.ACTION_BATTERY_LOW
表示电池电量低
Intent.ACTION_BATTERY_OKAY
表示电池电量充足,即从电池电量低变化到饱满时会发出广播
存储相关
Intent.ACTION_DEVICE_STORAGE_LOW
设备内存不足时发出的广播,此广播只能由系统使用,其它APP不可用
Intent.ACTION_DEVICE_STORAGE_OK
设备内存从不足到充足时发出的广播,此广播只能由系统使用,其它APP不可用
Intent.ACTION_MEDIA_BAD_REMOVAL
未正确移除SD卡(正确移除SD卡的方法:设置–SD卡和设备内存–卸载SD卡),但已把SD卡取出来时发出的广播 ,
扩展介质(扩展卡)已经从 SD 卡插槽拔出,但是挂载点 (mount point) 还没解除 (unmount)
扩展介质(扩展卡)已经从 SD 卡插槽拔出,但是挂载点 (mount point) 还没解除 (unmount)
Intent.ACTION_MEDIA_CHECKING
插入外部储存装置,比如SD卡时,系统会检验SD卡,此时发出的广播
Intent.ACTION_MEDIA_EJECT
已拔掉外部大容量储存设备发出的广播(比如SD卡,或移动硬盘),不管有没有正确卸载都会发出此广播, 用户想要移除扩展介质(拔掉扩展卡)
Intent.ACTION_MEDIA_MOUNTED
插入SD卡并且已正确安装(识别)时发出的广播, 扩展介质被插入,而且已经被挂载
Intent.ACTION_MEDIA_NOFS
拓展介质存在,但使用不兼容FS(或为空)的路径安装点检查介质包含在Intent.mData领域
Intent.ACTION_MEDIA_REMOVED
外部储存设备已被移除,不管有没正确卸载,都会发出此广播,扩展介质被移除
程序安装或者卸载相关
Intent.ACTION_PACKAGE_ADDED
一个新应用包已经安装在设备上,数据包括包名(最新安装的包程序不能接收到这个广播)
Intent.ACTION_PACKAGE_CHANGED
一个已存在的应用程序包已经改变,包括包名
Intent.ACTION_PACKAGE_INSTALL
触发一个下载并且完成安装时发出的广播,比如在电子市场里下载应用
Intent.ACTION_PACKAGE_REMOVED
成功的删除某个APK之后发出的广播, 包括包名(正在被安装程序不能接收到这个广播)
Intent.ACTION_PACKAGE_REPLACED
替换一个现有的安装包时发出的广播
其他
Intent.ACTION_HEADSET_PLUG
在耳机口上插入耳机时发出的广播
Intent.ACTION_POWER_CONNECTED
插上外部电源时发出的广播
Intent.ACTION_CONFIGURATION_CHANGED
设备当前设置被改变时发出的广播(包括的改变:界面语言,设备方向,等,请参考Configuration.java)
Intent.ACTION_AIRPLANE_M
关闭或打开飞行模式时的广播
Intent.ACTION_AIRPLANE_MODE_CHANGED
飞行模式发生改变时的广播
Intent.ACTION_DATE_CHANGED
设备日期发生改变时会发出此广播
Intent.ACTION_INPUT_METHOD_CHANGED
改变输入法时发出的广播
Intent.ACTION_POWER_DISCONNECTED
已断开外部电源连接时发出的广播
Intent.ACTION_TIME_CHANGED
时间被设置时发出的广播
Intent.ACTION_TIME_TICK
广播:当前时间已经变化(正常的时间流逝),当前时间改变,每分钟都发送,不能通过组件声明来接收,
只有通过Context.registerReceiver()方法来注册
只有通过Context.registerReceiver()方法来注册
Intent.ACTION_WALLPAPER_CHANGED
设备墙纸已改变时发出的广播
Fragment
概念
碎片是一种可以嵌入在活动当中的UI片段
使用
静态添加碎片
建立Activity
建立Fragment
通过fragment标签 android:name 属性 把fragment加到activity中
注意一定要给设置fragment标签ID 否则会报错
动态添加碎片
创建待添加碎片实例
获取FragmentManager,在活动中直接通过getSupportFragemtManager()方法得到
开启一个事务,通过调用beginTransaction()方法开启
向容器内添加碎片或替换碎片,一般使用replace方法实现,需要传入容器的ID和待添加的碎片实例
提交事务,调用commit方法来完成
返回
添加transaction.addToBackStack(null);
通信
活动与碎片之间的通信
FirstFragment firstFragment = (FirstFragment) getSupportFragmentManager().findFragmentById(R.id.fr_left);
碎片与活动之间的通信
FragmentActivity fragmentActivity= (FragmentActivity) getActivity();
碎片与碎片之间的通信
FragmentActivity fragmentActivity= (FragmentActivity) getActivity();
SecondFragment secondFragment=(SecondFragment) fragmentActivity.getSupportFragmentManager().findFragmentById(R.id.fl_right);
SecondFragment secondFragment=(SecondFragment) fragmentActivity.getSupportFragmentManager().findFragmentById(R.id.fl_right);
eventBus
生命周期
状态
运行状态
当一个碎片是可见的,并且它所关联的活动正处于运行状态时,该碎片也处于运行状态。
暂停状态
当一个活动进入暂停状态时,被覆盖时,进入暂停状态
停止状态
当一个活动进入停止状态时,与他关联的碎片也会进入停止状态
销毁状态
活动被销毁时,与它关联的碎片也随之销毁
回调方法
onAttach()
当碎片与活动简历关联的时候调用
onCreateView()
为碎片创建视图时调用
onActivityCreated()
确保与碎片相关联的活动一起已经创建完毕的时候调用
onDestroyView()
当与碎片关联的视图被移除时调用
onDetach()
当碎片和活动接触关联时调用
体验生命周期
正常流程
启动时
2019-12-04 00:34:31.444 5611-5611/com.yx.jjzg D/yaoxin Fragment: onAttach
2019-12-04 00:34:31.444 5611-5611/com.yx.jjzg D/yaoxin Fragment: onCreate
2019-12-04 00:34:31.469 5611-5611/com.yx.jjzg D/yaoxin Fragment: onCreateView
2019-12-04 00:34:31.494 5611-5611/com.yx.jjzg D/yaoxin Fragment: onActivityCreated
2019-12-04 00:34:31.507 5611-5611/com.yx.jjzg D/yaoxin Fragment: onStart
2019-12-04 00:34:31.515 5611-5611/com.yx.jjzg D/yaoxin Fragment: onResume
2019-12-04 00:34:31.444 5611-5611/com.yx.jjzg D/yaoxin Fragment: onCreate
2019-12-04 00:34:31.469 5611-5611/com.yx.jjzg D/yaoxin Fragment: onCreateView
2019-12-04 00:34:31.494 5611-5611/com.yx.jjzg D/yaoxin Fragment: onActivityCreated
2019-12-04 00:34:31.507 5611-5611/com.yx.jjzg D/yaoxin Fragment: onStart
2019-12-04 00:34:31.515 5611-5611/com.yx.jjzg D/yaoxin Fragment: onResume
回到桌面
2019-12-04 00:34:41.374 5611-5611/com.yx.jjzg D/yaoxin Fragment: onPause
2019-12-04 00:34:41.749 5611-5611/com.yx.jjzg D/yaoxin Fragment: onStop
2019-12-04 00:34:41.749 5611-5611/com.yx.jjzg D/yaoxin Fragment: onStop
返回
2019-12-04 00:34:48.650 5611-5611/com.yx.jjzg D/yaoxin Fragment: onStart
2019-12-04 00:34:48.655 5611-5611/com.yx.jjzg D/yaoxin Fragment: onResume
2019-12-04 00:34:48.655 5611-5611/com.yx.jjzg D/yaoxin Fragment: onResume
退出
2019-12-04 00:32:48.322 5142-5142/com.yx.jjzg D/yaoxin: onPause
2019-12-04 00:32:48.680 5142-5142/com.yx.jjzg D/yaoxin: onStop
2019-12-04 00:32:48.682 5142-5142/com.yx.jjzg D/yaoxin: onDestroyView
2019-12-04 00:32:48.683 5142-5142/com.yx.jjzg D/yaoxin: onDestroy
2019-12-04 00:32:48.683 5142-5142/com.yx.jjzg D/yaoxin: onDetach
2019-12-04 00:32:48.680 5142-5142/com.yx.jjzg D/yaoxin: onStop
2019-12-04 00:32:48.682 5142-5142/com.yx.jjzg D/yaoxin: onDestroyView
2019-12-04 00:32:48.683 5142-5142/com.yx.jjzg D/yaoxin: onDestroy
2019-12-04 00:32:48.683 5142-5142/com.yx.jjzg D/yaoxin: onDetach
替换Fragemnt
启动
2019-12-04 00:36:14.903 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onAttach
2019-12-04 00:36:14.903 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onCreate
2019-12-04 00:36:14.914 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onCreateView
2019-12-04 00:36:14.915 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onActivityCreated
2019-12-04 00:36:14.915 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onStart
2019-12-04 00:36:14.923 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onResume
2019-12-04 00:36:14.903 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onCreate
2019-12-04 00:36:14.914 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onCreateView
2019-12-04 00:36:14.915 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onActivityCreated
2019-12-04 00:36:14.915 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onStart
2019-12-04 00:36:14.923 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onResume
覆盖
2019-12-04 00:36:23.802 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onPause
2019-12-04 00:36:23.802 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onStop
2019-12-04 00:36:23.802 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onDestroyView
2019-12-04 00:36:23.802 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onStop
2019-12-04 00:36:23.802 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onDestroyView
返回
2019-12-04 00:37:37.095 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onCreateView
2019-12-04 00:37:37.100 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onActivityCreated
2019-12-04 00:37:37.101 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onStart
2019-12-04 00:37:37.101 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onResume
2019-12-04 00:37:37.095 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onCreateView
2019-12-04 00:37:37.100 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onActivityCreated
2019-12-04 00:37:37.101 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onStart
2019-12-04 00:37:37.101 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onResume
退出
2019-12-04 00:38:19.075 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onPause
2019-12-04 00:38:19.076 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onStop
2019-12-04 00:38:19.076 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onDestroyView
2019-12-04 00:38:19.085 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onDestroy
2019-12-04 00:38:19.085 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onDetach
2019-12-04 00:38:19.076 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onStop
2019-12-04 00:38:19.076 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onDestroyView
2019-12-04 00:38:19.085 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onDestroy
2019-12-04 00:38:19.085 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onDetach
与Activity一起
启动
2019-12-04 00:41:23.893 6257-6257/com.yx.jjzg D/yaoxin FirstFragment: onAttach
2019-12-04 00:41:23.893 6257-6257/com.yx.jjzg D/yaoxin FirstFragment: onCreate
2019-12-04 00:41:23.921 6257-6257/com.yx.jjzg D/yaoxin FirstFragment: onCreateView
2019-12-04 00:41:23.942 6257-6257/com.yx.jjzg D/yaoxin FragmentActivity: onCreate
2019-12-04 00:41:23.946 6257-6257/com.yx.jjzg D/yaoxin FirstFragment: onActivityCreated
2019-12-04 00:41:23.961 6257-6257/com.yx.jjzg D/yaoxin FirstFragment: onStart
2019-12-04 00:41:23.961 6257-6257/com.yx.jjzg D/yaoxin FragmentActivity: onStart
2019-12-04 00:41:23.968 6257-6257/com.yx.jjzg D/yaoxin FragmentActivity: onResume
2019-12-04 00:41:23.968 6257-6257/com.yx.jjzg D/yaoxin FirstFragment: onResume
2019-12-04 00:41:23.893 6257-6257/com.yx.jjzg D/yaoxin FirstFragment: onCreate
2019-12-04 00:41:23.921 6257-6257/com.yx.jjzg D/yaoxin FirstFragment: onCreateView
2019-12-04 00:41:23.942 6257-6257/com.yx.jjzg D/yaoxin FragmentActivity: onCreate
2019-12-04 00:41:23.946 6257-6257/com.yx.jjzg D/yaoxin FirstFragment: onActivityCreated
2019-12-04 00:41:23.961 6257-6257/com.yx.jjzg D/yaoxin FirstFragment: onStart
2019-12-04 00:41:23.961 6257-6257/com.yx.jjzg D/yaoxin FragmentActivity: onStart
2019-12-04 00:41:23.968 6257-6257/com.yx.jjzg D/yaoxin FragmentActivity: onResume
2019-12-04 00:41:23.968 6257-6257/com.yx.jjzg D/yaoxin FirstFragment: onResume
回到桌面
2019-12-04 00:42:12.010 6257-6257/com.yx.jjzg D/yaoxin FirstFragment: onPause
2019-12-04 00:42:12.010 6257-6257/com.yx.jjzg D/yaoxin FragmentActivity: onPause
2019-12-04 00:42:12.360 6257-6257/com.yx.jjzg D/yaoxin FirstFragment: onStop
2019-12-04 00:42:12.361 6257-6257/com.yx.jjzg D/yaoxin FragmentActivity: onStop
2019-12-04 00:42:12.010 6257-6257/com.yx.jjzg D/yaoxin FragmentActivity: onPause
2019-12-04 00:42:12.360 6257-6257/com.yx.jjzg D/yaoxin FirstFragment: onStop
2019-12-04 00:42:12.361 6257-6257/com.yx.jjzg D/yaoxin FragmentActivity: onStop
返回
2019-12-04 00:42:33.275 6257-6257/com.yx.jjzg D/yaoxin FragmentActivity: onRestart
2019-12-04 00:42:33.285 6257-6257/com.yx.jjzg D/yaoxin FirstFragment: onStart
2019-12-04 00:42:33.286 6257-6257/com.yx.jjzg D/yaoxin FragmentActivity: onStart
2019-12-04 00:42:33.290 6257-6257/com.yx.jjzg D/yaoxin FragmentActivity: onResume
2019-12-04 00:42:33.291 6257-6257/com.yx.jjzg D/yaoxin FirstFragment: onResume
2019-12-04 00:42:33.285 6257-6257/com.yx.jjzg D/yaoxin FirstFragment: onStart
2019-12-04 00:42:33.286 6257-6257/com.yx.jjzg D/yaoxin FragmentActivity: onStart
2019-12-04 00:42:33.290 6257-6257/com.yx.jjzg D/yaoxin FragmentActivity: onResume
2019-12-04 00:42:33.291 6257-6257/com.yx.jjzg D/yaoxin FirstFragment: onResume
退出
2019-12-04 00:42:47.527 6257-6257/com.yx.jjzg D/yaoxin FirstFragment: onPause
2019-12-04 00:42:47.527 6257-6257/com.yx.jjzg D/yaoxin FragmentActivity: onPause
2019-12-04 00:42:47.904 6257-6257/com.yx.jjzg D/yaoxin FirstFragment: onStop
2019-12-04 00:42:47.905 6257-6257/com.yx.jjzg D/yaoxin FragmentActivity: onStop
2019-12-04 00:42:47.906 6257-6257/com.yx.jjzg D/yaoxin FirstFragment: onDestroyView
2019-12-04 00:42:47.906 6257-6257/com.yx.jjzg D/yaoxin FirstFragment: onDestroy
2019-12-04 00:42:47.906 6257-6257/com.yx.jjzg D/yaoxin FirstFragment: onDetach
2019-12-04 00:42:47.906 6257-6257/com.yx.jjzg D/yaoxin FragmentActivity: onDestroy
2019-12-04 00:42:47.527 6257-6257/com.yx.jjzg D/yaoxin FragmentActivity: onPause
2019-12-04 00:42:47.904 6257-6257/com.yx.jjzg D/yaoxin FirstFragment: onStop
2019-12-04 00:42:47.905 6257-6257/com.yx.jjzg D/yaoxin FragmentActivity: onStop
2019-12-04 00:42:47.906 6257-6257/com.yx.jjzg D/yaoxin FirstFragment: onDestroyView
2019-12-04 00:42:47.906 6257-6257/com.yx.jjzg D/yaoxin FirstFragment: onDestroy
2019-12-04 00:42:47.906 6257-6257/com.yx.jjzg D/yaoxin FirstFragment: onDetach
2019-12-04 00:42:47.906 6257-6257/com.yx.jjzg D/yaoxin FragmentActivity: onDestroy
小技巧
强制别人下线
0 条评论
下一页