Android_黑马视频学习_day07
2017-12-25 23:52
344 查看
一、为什么需要广播接收(broadcastReceiver)
[1]有什么样的人员听广播 老人 出租车司机 寂寞的大学生 情感夜话
[2]想听广播必须的有:电台 有收音机 音乐广播
[3]Android系统内部已经定义好了电台 已经定义好了一些广播事件 比如 外拨电话 短信到来 sd状态 电池电量
[4]使用broadcastReceiver去接收系统已经定义好的这些事件
[5] javame javase javaee
[6]定义广播接收者的目的是为了方便开发者进行开发
二、广播接收者案例_ip拨号器
360永远免费 瑞星 卡巴司机 滴滴
[1]定义广播接收者 相当于你买了一个收音机
public class OutGoingCallReceiver extends BroadcastReceiver{
[2]在清单文件里面配置 相当于你安装了一块电池
<receiver android:name="com.itheima.ipdail.outGoingCallReceiver">
[3]具体调到一个合适的频道
<intent-filter >
<action android:name="android.intent.action.NEW _OUTGOING CALL"/>
</intent-filter>
[4]记得加上权限
三、广播接收者案例_sd卡状态监听
[1]定义广播接受者
[2]在清单文件里面配置
四、广播接收者案例_短信监听器
五、不同版本广播的特点
[1]在4.0 谷歌工程师要求 第一次安装应用的时候必须的有界面 这样广播接收者才生效
[2]在设置页面有一个强行停止的按钮 如果说用户点击了强行停止按钮 那么广播接收者也不生效
[3]在2.3的手机上没有这样的安全设计
六、广播接收者案例_卸载安装
[1]定义广播接受者
[2]在清单文件里面注册
大数据挖掘: 偷菜 -- 校内 -- 人人 精准营销
七、广播接收者案例_开机启动
10-06 03:05: 37.766: E /AndroidRuntime (1160): java.lang.RuntimeExcept ion: Unable to start receiver com.itheima.bootreceiver.BootReceiver:
android.util.AndroidRuntimeException: _Calling startActivity () from outside of an Activity context requires theFLAGACTIVITY_NEW_TASK flag.
Is this really what you want?
10-06 03 :05 :39.437: D/MediaScanner (1069) : prescan time: 3ms
[1]定义广播接受者
[2]在清单文件里面注册
[4]记得加上权限
八、有序广播和无序广播
(1)有序广播 类似中央发送红头文件
[1]有序广播可以被终止
[2]有序广播的数据可以被修改
(2)无序广播 比如新闻联播 每天晚上7点准时开播
[1]无序广播不可以被终止
[2]数据不可以被修改
九、特殊广播接收者
操作特别频繁的广播时间 比如 屏幕的锁屏和解锁 电池电量的变化 这种事件的广播在清单文件里面注册无效
注册广播接受者的2种方式
[1]动态注册 通过代码方式注册
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activi ty_main) ;
//动态的去注册广播接收者
screenReceiver = new ScreenReceiver( );
//创建IntentFilter 对象
IntentFilter filter= new IntentFilter();
//添加要注册的action
filter.addAction("android.intent.action.SCREEN _OFF");
filter.addAction("android.intent.action.SCREEN _ON");
//动态注册广播接收者
registerReceiver(screenReceiver,filter) ;
}
protected void onDestroy() {
//当activity 销毁的时候要取消注册广播接收者
unregisterReceiver(screenReceiver);
super.onDestroy() ;
}
[2]在清单文件通过receiver tag 节点静态发布
十、样式和主题
样式:一般作用在控件上(button textview 等) 样式作用范围比较窄
主题:一般作用在activity 或者Application节点下 作用苑围比较大
共同点:定义的方式是一样的
十一、国际化
你好世界 hello world
国际化 i18n
周杰伦 jay
林俊杰 jj
在res下创建不同国家语言环境集目录 目录是固定写法 values-en values-zh ... ...
(可在IE浏览器的Internet选项查看所有国家的固定写法,win10好像没有,还是百度搜吧)
十二、常见对话框
[1] Toast
[2] 普通对话框 单选对话框 多选对话框 进度条对话框
十三、2种上下文的区别
[1]this 最终继承Context 理解子类
[2]getApplicationContext() 返回的对象是Context 对象 父类
[3]对话只能用this
十四、Android中的动画
[1]帧动画
加载一系列的图片资源
[2]view动画 补间动画
[3]属性动画
[1]有什么样的人员听广播 老人 出租车司机 寂寞的大学生 情感夜话
[2]想听广播必须的有:电台 有收音机 音乐广播
[3]Android系统内部已经定义好了电台 已经定义好了一些广播事件 比如 外拨电话 短信到来 sd状态 电池电量
[4]使用broadcastReceiver去接收系统已经定义好的这些事件
[5] javame javase javaee
[6]定义广播接收者的目的是为了方便开发者进行开发
二、广播接收者案例_ip拨号器
360永远免费 瑞星 卡巴司机 滴滴
[1]定义广播接收者 相当于你买了一个收音机
public class OutGoingCallReceiver extends BroadcastReceiver{
[2]在清单文件里面配置 相当于你安装了一块电池
<receiver android:name="com.itheima.ipdail.outGoingCallReceiver">
[3]具体调到一个合适的频道
<intent-filter >
<action android:name="android.intent.action.NEW _OUTGOING CALL"/>
</intent-filter>
[4]记得加上权限
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
三、广播接收者案例_sd卡状态监听
[1]定义广播接受者
public class SdcardStateReceiver extends BroadcastReceiver { //当sdcard状态发生改变的时候调用 public void onReceive(Context context, Intent intent) { //获取到当前广播的事件类型 String action = intent.getAction(); if("android.intent.action.MEDIA_MOUNTED".equals(action)) { System.out.print 4000 ln("说明sdcard挂载了..."); } else if("android.intent.action.MEDIA_UNMOUNTED".equals(action)) { System.out.println("说明sdcard卸载了..."); } } }
[2]在清单文件里面配置
<receiver android:name=".SdcardStateReceiver"> <intent-filter> <action android:name="android.intent.action.MEDIA_MOUNTED"/> <action android:name="android.intent.action.MEDIA_UNMOUNTED"/> <!--小细节 这里需要配置一个data 约束类型必须叫file 因为sd里面存的数据类型是file--> <data android:scheme="file"/> </intent-filter> </receiver>
四、广播接收者案例_短信监听器
public class SmsListenerReceiver extends BroadcastReceiver { //当短信到来的时候执行 public void onReceive(Context context, Intent intent) { //获取发送者的号码和内容 Object[] objects = (Object[]) intent.getExtras().get("pdus"); for(Object obj : objects) { //[1]获取smsmessagge实例 SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) obj); //[2]获取发送短信的内容 String messageBody = smsMessage.getMessageBody(); String address = smsMessage.getOriginatingAddress(); System.out.println("body:"+messageBody+"------"+address); } } }
<receiver android:name=".SmsListenerReceiver"> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVER"/> </intent-filter> </receiver>
五、不同版本广播的特点
[1]在4.0 谷歌工程师要求 第一次安装应用的时候必须的有界面 这样广播接收者才生效
[2]在设置页面有一个强行停止的按钮 如果说用户点击了强行停止按钮 那么广播接收者也不生效
[3]在2.3的手机上没有这样的安全设计
六、广播接收者案例_卸载安装
[1]定义广播接受者
public class AppStateReceiver extends BroadcastReceiver { //当有新的应用被安装了 或者有应用被卸载了 这个方法调用 public void onReceive(Context context, Intent intent) { //获取当前广播事件类型 String action = intent.getAction(); if("android.intent.action.PACKAGE_INSTALL".equals(action)) { System.out.println("应用安装了11111"); } else if ("android.intent.action.PACKAGE_ADDED".equals(action)) { System.out.println("应用安装了22222"); } else if("android.intent.action.PACKAGE_REMOVED".equals(action)) { System.out.println("应用卸载了33333"); } } }
[2]在清单文件里面注册
<receiver android:name=".AppStateReceiver"> <intent-filter> <action android:name="android.intent.action.PACKAGE_INSTALL"/> <action android:name="android.intent.action.PACKAGE_ADDED"/> <action android:name="android.intent.action.PACKAGE_REMOVED"/> <!--想让action事件生效 还需要配置一个data--> <data android:scheme="package"/> </intent-filter> </receiver>
大数据挖掘: 偷菜 -- 校内 -- 人人 精准营销
七、广播接收者案例_开机启动
10-06 03:05: 37.766: E /AndroidRuntime (1160): java.lang.RuntimeExcept ion: Unable to start receiver com.itheima.bootreceiver.BootReceiver:
android.util.AndroidRuntimeException: _Calling startActivity () from outside of an Activity context requires theFLAGACTIVITY_NEW_TASK flag.
Is this really what you want?
10-06 03 :05 :39.437: D/MediaScanner (1069) : prescan time: 3ms
注意 不能在广播接受者里面直接开启activity 需要添加一个标记 添加一个任务栈的标记
[1]定义广播接受者
public class BootReceiver extends BroadcastReceiver { //当手机重新启动的时候调用 public void onReceive(Context context, Intent intent) { //在这个方法里面开启activity Intent intent2 = new Intent(context, MainActivity.class); //注意 不能在广播接受者里面直接开启activity 需要添加一个标记 添加一个任务栈的标记 intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //开启activity context.startActivity(intent2); } }
[2]在清单文件里面注册
<receiver android:name=".BootReceiver"> <intent-filter> <action android df5d :name="android.intent.action.BOOT_COMPLETED"/> </intent-filter> </receiver>
[4]记得加上权限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
八、有序广播和无序广播
(1)有序广播 类似中央发送红头文件
[1]有序广播可以被终止
[2]有序广播的数据可以被修改
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } //点击按钮 发送有序广播 发大米 public void chick(View view) { Intent intent = new Intent(); intent.setAction("com.excample.sendrice"); /** * intent 意图 * receiverPermission 接收的权限 * resultReveiver 最终的receiver * scheduler handler * initialCode 初始码 * initialData 初始化数据 */ sendOrderedBroadcast(intent, null, new FinalReceiver(), null, 1, "习大大给每个村民发了1000斤大米", null); } }
public class FinalReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { //[1]获取发送广播携带的数据 String content = getResultData(); //[2]显示结果 Toast.makeText(context, "报告习大大:"+content, Toast.LENGTH_LONG).show(); } }
public class ProvienceReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { //[1]获取发送广播携带的数据 String content = getResultData(); //[2]显示结果 Toast.makeText(context, "省:"+content, Toast.LENGTH_LONG).show(); //[2.1]终止广播 abortBroadcast(); //[3]修改数据 setResultData("习大大给每个村民发了500斤大米"); } }
public class CityReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { //[1]获取发送广播携带的数据 String content = getResultData(); //[2]显示结果 Toast.makeText(context, "市:"+content, Toast.LENGTH_LONG).show(); //[3]修改数据 setResultData("习大大给每个村民发了200斤大米"); } }
public class CountryReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { //[1]获取发送广播携带的数据 String content = getResultData(); //[2]显示结果 Toast.makeText(context, "乡:"+content, Toast.LENGTH_LONG).show(); //[3]修改数据 setResultData("习大大给每个村民发了10斤大米"); } }
public class NongMinReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { //[1]获取发送广播携带的数据 String content = getResultData(); //[2]显示结果 Toast.makeText(context, "农民:"+content, Toast.LENGTH_LONG).show(); } }
(2)无序广播 比如新闻联播 每天晚上7点准时开播
[1]无序广播不可以被终止
[2]数据不可以被修改
//点击按钮发送一条无序广播 public void chick(View view) { Intent intent = new Intent(); intent.setAction("com.example.custom"); intent.putExtra("name", "新闻联播每天晚上准时开播"); sendBroadcast(intent); //发送无序广播 }
<receiver android:name=".ReceiveCustomReceiver"> <intent-filter> <action android:name="com.example.custom"/> </intent-filter> </receiver>
九、特殊广播接收者
操作特别频繁的广播时间 比如 屏幕的锁屏和解锁 电池电量的变化 这种事件的广播在清单文件里面注册无效
注册广播接受者的2种方式
[1]动态注册 通过代码方式注册
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activi ty_main) ;
//动态的去注册广播接收者
screenReceiver = new ScreenReceiver( );
//创建IntentFilter 对象
IntentFilter filter= new IntentFilter();
//添加要注册的action
filter.addAction("android.intent.action.SCREEN _OFF");
filter.addAction("android.intent.action.SCREEN _ON");
//动态注册广播接收者
registerReceiver(screenReceiver,filter) ;
}
protected void onDestroy() {
//当activity 销毁的时候要取消注册广播接收者
unregisterReceiver(screenReceiver);
super.onDestroy() ;
}
[2]在清单文件通过receiver tag 节点静态发布
十、样式和主题
样式:一般作用在控件上(button textview 等) 样式作用范围比较窄
主题:一般作用在activity 或者Application节点下 作用苑围比较大
共同点:定义的方式是一样的
十一、国际化
你好世界 hello world
国际化 i18n
周杰伦 jay
林俊杰 jj
在res下创建不同国家语言环境集目录 目录是固定写法 values-en values-zh ... ...
(可在IE浏览器的Internet选项查看所有国家的固定写法,win10好像没有,还是百度搜吧)
十二、常见对话框
[1] Toast
[2] 普通对话框 单选对话框 多选对话框 进度条对话框
十三、2种上下文的区别
[1]this 最终继承Context 理解子类
[2]getApplicationContext() 返回的对象是Context 对象 父类
[3]对话只能用this
十四、Android中的动画
[1]帧动画
加载一系列的图片资源
[2]view动画 补间动画
[3]属性动画
相关文章推荐
- Android_黑马视频学习_day03
- Android_黑马视频学习_day06
- 黑马最新android学习视频
- Android_黑马视频学习_day04
- Mars Android视频学习笔记——01_21/22_广播机制
- Android多媒体学习十四:播放网络上的视频
- Mars Android视频学习笔记——03_03/04_用户定位
- Android多媒体学习十五:使用在内置的Camera录制视频
- Android游戏开发学习笔记(三):视频的播放
- Android 学习视频网站(需下载电驴的)
- android 多媒体部分学习笔记十--简单视频播放
- Android多媒体学习十四:播放网络上的视频
- 黑马视频学习-银行
- Android学习二、MediaPlayer播放视频
- android 多媒体部分学习笔记十--简单视频播放
- Mars Android视频学习笔记——01_16_SQLite使用方法
- Mars Android视频学习笔记
- 黑马视频学习-交通灯
- 黑马训练营预习视频之学习日记(二)