Android 第五课时 by姚鑫
2020-01-17 14:45:33 6 举报
AI智能生成
Andorid
作者其他创作
大纲/内容
Broadcast Receiver
简介
android广播机制就是在Android中,有一些操作完成以后,会发送广播,比如说发出一条短信,或打出一个电话,如果某个程序接收了这个广播,就会做相应的处理。
类似于一种观察者模式
类型
标准广播
特点
是一种完全异步执行的广播<br>
在广播发出之后,所有的广播接收器同时接收到这个广播<br>
没有先后顺序<br>
效率高,无法被截断<br>
使用
定义类继承BroadcastReceiver用于接收广播
AndroidManifest中注册广播,增加intent filter
发送广播
有序广播
特点
同步执行的广播<br>
在广播发出之后,同时只会有一个广播接收器收到这条广播<br>
当这个广播接收器处理完之后,继续传递<br>
有先后顺序<br>
优先级高的先接收广播<br>
使用
sendOrderedBroadcast(intent, null);
第一参数Intent
第二参数与权限相关的字符串,null就可以
在AndroidManifest中间修改intent-filter属性
android:priority="100"<br>
注册
静态注册
代码中注册
动态注册
AndoridManifest中注册
接收广播
继承BroadcastReceiver
重写onReceive()方法
使用
监听网络变化
创建一个内部类继承BroadcastReceiver,重写onReceiver
添加权限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>android.permission.ACCESS_NETWORK_STATE<br>
ConnectivityManager
是一个系统服务类,专门用于管理网络<br>
添加网络监听监听码
mIntentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
注册广播
取消注册
静态注册开机启动
action
android.intent.action.BOOT_COMPLETED<br>
开机
android.intent.action.ACTION_SHUTDOWN<action android:name="android.intent.action.ACTION_SHUTDOWN"></action>
关机
category<br>
android.intent.category.LAUNCHER
Exported<br>
表示是否允许这个广播接收器接收本程序以外的广播<br>
Enabled<br>
表示是否启用这个广播接收器<br>
本地广播
为什么要用本地广播
前面介绍的都是全局广播,可以被任何应用程序接收到,我们也可以接收其他应用程序的广播,有安全问题<br>
使用LocalBroadcastManager
用法和使用静态注册广播一样
使用后其他程序无法接收到此广播
优点
可以明确知道正在发送的广播不会离开我们的程序,因此不会担心机密数据泄漏
其他的程序无法将广播发送大我们程序内部,因此不需要担心会有安全漏洞的隐患
发送本地广播比发送系统全局广播讲会更加高效
系统广播
屏幕操作相关
Intent.ACTION_REBOOT<br>
重启设备时的广播
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卡取出来时发出的广播 , <br>扩展介质(扩展卡)已经从 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
广播:当前时间已经变化(正常的时间流逝),当前时间改变,每分钟都发送,不能通过组件声明来接收, <br>只有通过Context.registerReceiver()方法来注册
Intent.ACTION_WALLPAPER_CHANGED
设备墙纸已改变时发出的广播
Fragment<br>
概念
碎片是一种可以嵌入在活动当中的UI片段<br>
使用
静态添加碎片<br>
建立Activity
建立Fragment<br>
通过fragment标签 android:name 属性 把fragment加到activity中
注意一定要给设置fragment标签ID 否则会报错
动态添加碎片<br>
创建待添加碎片实例<br>
获取FragmentManager,在活动中直接通过getSupportFragemtManager()方法得到<br>
开启一个事务,通过调用beginTransaction()方法开启<br>
向容器内添加碎片或替换碎片,一般使用replace方法实现,需要传入容器的ID和待添加的碎片实例<br>
提交事务,调用commit方法来完成<br>
返回
添加transaction.addToBackStack(null);<br>
通信
活动与碎片之间的通信<br>
FirstFragment firstFragment = (FirstFragment) getSupportFragmentManager().findFragmentById(R.id.fr_left);<br>
碎片与活动之间的通信<br>
FragmentActivity fragmentActivity= (FragmentActivity) getActivity();<br>
碎片与碎片之间的通信<br>
FragmentActivity fragmentActivity= (FragmentActivity) getActivity();<br> SecondFragment secondFragment=(SecondFragment) fragmentActivity.getSupportFragmentManager().findFragmentById(R.id.fl_right);<br>
eventBus
生命周期
状态<br>
运行状态<br>
当一个碎片是可见的,并且它所关联的活动正处于运行状态时,该碎片也处于运行状态。<br>
暂停状态<br>
当一个活动进入暂停状态时,被覆盖时,进入暂停状态<br>
停止状态<br>
当一个活动进入停止状态时,与他关联的碎片也会进入停止状态<br>
销毁状态<br>
活动被销毁时,与它关联的碎片也随之销毁<br>
回调方法<br>
onAttach()<br>
当碎片与活动简历关联的时候调用<br>
onCreateView()<br>
为碎片创建视图时调用<br>
onActivityCreated()<br>
确保与碎片相关联的活动一起已经创建完毕的时候调用<br>
onDestroyView()<br>
当与碎片关联的视图被移除时调用<br>
onDetach()<br>
当碎片和活动接触关联时调用<br>
体验生命周期
正常流程
启动时
2019-12-04 00:34:31.444 5611-5611/com.yx.jjzg D/yaoxin Fragment: onAttach<br>2019-12-04 00:34:31.444 5611-5611/com.yx.jjzg D/yaoxin Fragment: onCreate<br>2019-12-04 00:34:31.469 5611-5611/com.yx.jjzg D/yaoxin Fragment: onCreateView<br>2019-12-04 00:34:31.494 5611-5611/com.yx.jjzg D/yaoxin Fragment: onActivityCreated<br>2019-12-04 00:34:31.507 5611-5611/com.yx.jjzg D/yaoxin Fragment: onStart<br>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<br>2019-12-04 00:34:41.749 5611-5611/com.yx.jjzg D/yaoxin Fragment: onStop<br>
返回
2019-12-04 00:34:48.650 5611-5611/com.yx.jjzg D/yaoxin Fragment: onStart<br>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<br>2019-12-04 00:32:48.680 5142-5142/com.yx.jjzg D/yaoxin: onStop<br>2019-12-04 00:32:48.682 5142-5142/com.yx.jjzg D/yaoxin: onDestroyView<br>2019-12-04 00:32:48.683 5142-5142/com.yx.jjzg D/yaoxin: onDestroy<br>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<br>2019-12-04 00:36:14.903 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onCreate<br>2019-12-04 00:36:14.914 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onCreateView<br>2019-12-04 00:36:14.915 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onActivityCreated<br>2019-12-04 00:36:14.915 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onStart<br>2019-12-04 00:36:14.923 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onResume<br>
覆盖
2019-12-04 00:36:23.802 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onPause<br>2019-12-04 00:36:23.802 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onStop<br>2019-12-04 00:36:23.802 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onDestroyView
返回
<br>2019-12-04 00:37:37.095 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onCreateView<br>2019-12-04 00:37:37.100 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onActivityCreated<br>2019-12-04 00:37:37.101 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onStart<br>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<br>2019-12-04 00:38:19.076 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onStop<br>2019-12-04 00:38:19.076 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onDestroyView<br>2019-12-04 00:38:19.085 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onDestroy<br>2019-12-04 00:38:19.085 5831-5831/com.yx.jjzg D/yaoxin SecondFragment: onDetach<br>
与Activity一起
启动
2019-12-04 00:41:23.893 6257-6257/com.yx.jjzg D/yaoxin FirstFragment: onAttach<br>2019-12-04 00:41:23.893 6257-6257/com.yx.jjzg D/yaoxin FirstFragment: onCreate<br>2019-12-04 00:41:23.921 6257-6257/com.yx.jjzg D/yaoxin FirstFragment: onCreateView<br><font color="#f15a23">2019-12-04 00:41:23.942 6257-6257/com.yx.jjzg D/yaoxin FragmentActivity: onCreate</font><br>2019-12-04 00:41:23.946 6257-6257/com.yx.jjzg D/yaoxin FirstFragment: onActivityCreated<br>2019-12-04 00:41:23.961 6257-6257/com.yx.jjzg D/yaoxin FirstFragment: onStart<br><font color="#f15a23">2019-12-04 00:41:23.961 6257-6257/com.yx.jjzg D/yaoxin FragmentActivity: onStart<br>2019-12-04 00:41:23.968 6257-6257/com.yx.jjzg D/yaoxin FragmentActivity: onResume</font><br>2019-12-04 00:41:23.968 6257-6257/com.yx.jjzg D/yaoxin FirstFragment: onResume<br>
回到桌面
2019-12-04 00:42:12.010 6257-6257/com.yx.jjzg D/yaoxin FirstFragment: onPause<br><font color="#f15a23">2019-12-04 00:42:12.010 6257-6257/com.yx.jjzg D/yaoxin FragmentActivity: onPause</font><br>2019-12-04 00:42:12.360 6257-6257/com.yx.jjzg D/yaoxin FirstFragment: onStop<br><font color="#f15a23">2019-12-04 00:42:12.361 6257-6257/com.yx.jjzg D/yaoxin FragmentActivity: onStop</font>
返回
<font color="#f15a23">2019-12-04 00:42:33.275 6257-6257/com.yx.jjzg D/yaoxin FragmentActivity: onRestart</font><br>2019-12-04 00:42:33.285 6257-6257/com.yx.jjzg D/yaoxin FirstFragment: onStart<br><font color="#f15a23">2019-12-04 00:42:33.286 6257-6257/com.yx.jjzg D/yaoxin FragmentActivity: onStart<br>2019-12-04 00:42:33.290 6257-6257/com.yx.jjzg D/yaoxin FragmentActivity: onResume</font><br>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<br><font color="#f15a23">2019-12-04 00:42:47.527 6257-6257/com.yx.jjzg D/yaoxin FragmentActivity: onPause<br></font>2019-12-04 00:42:47.904 6257-6257/com.yx.jjzg D/yaoxin FirstFragment: onStop<br><font color="#f15a23">2019-12-04 00:42:47.905 6257-6257/com.yx.jjzg D/yaoxin FragmentActivity: onStop</font><br>2019-12-04 00:42:47.906 6257-6257/com.yx.jjzg D/yaoxin FirstFragment: onDestroyView<br>2019-12-04 00:42:47.906 6257-6257/com.yx.jjzg D/yaoxin FirstFragment: onDestroy<br>2019-12-04 00:42:47.906 6257-6257/com.yx.jjzg D/yaoxin FirstFragment: onDetach<br><font color="#f15a23">2019-12-04 00:42:47.906 6257-6257/com.yx.jjzg D/yaoxin FragmentActivity: onDestroy</font>
小技巧
强制别人下线
0 条评论
下一页