安卓基础DAY07 笔记

day07
1_回顾昨天&展望今天 
2_为什么需要广播接收者 重要
3_IP拨号器实现1
4_ip拨号器完成外拨
5_sd卡状态的监听sd卡生效必须加scheme='file'重要
6_不同版本手机广播接收者的特点 重要
7_广播接收者案例_卸载安装 
8_手机重启案例(开机启动)1.任务栈2.后退按键屏蔽 案例勒索软件,医院案例重要
9_有序广播和无序广播下发物资案例重要
10_特殊的广播接收者1.判断锁屏 2.清单文件注册和动态代码注册两种重要注意Act要取消注册广接
11_Android中样式和主题
12_Android中的国际化
13_单选对话框1.上下文的两种区别2.AlertDialog.Builder重要
14_Android中常用对话框SystemClock
15_Android中的帧动画
16_今日总结

1 为什么需要广播接收者(broadcastReceiver)
(1)老年人 
(2)出租车司机  
(3)寂寞的大学生  情感夜话  卖药的 音乐台 
(4)想听广播必须的有电台   你在买一个收音机 安装一块电池  调到一个合适的频道 
(5)Android系统内部相当于已经有一个电台 定义了好多的广播事件  比如外拨电话 短信到来 sd卡状态  电池电量变化....
(6)谷歌工程师给我们定义了一个组件专门用来接收这些事件的 
(7)谷歌工程师为什么要设计这样一个组件  目的就是为了方便开发者进行开发 
(8)javase javaee javame 

2 广播接收者案例_ip拨号器
  (1)定义一个类继承BroadCastReceiver 

  
  
  1. public class OutGoingCallReceiver extends BroadcastReceiver {
  2. //当接收到外拨电话的事件的时候回执行这个方法
  3. @Override
  4. public void onReceive(Context context, Intent intent) {
  5. //[0]获取到我们保存的ip号码
  6. SharedPreferences sp = context.getSharedPreferences("config", 0);
  7. //[0.1]获取我们保存的ip号码
  8. String ipnumber = sp.getString("ipnumber", "");
  9. //[1]获取当前我们要拨打的电话号码
  10. String currentNumber = getResultData();
  11. //[1.1]判断拨打的电话是否是长途
  12. if (currentNumber.startsWith("0")) {
  13. //[2]在当前的号码前面加上一个17951
  14. setResultData(ipnumber+currentNumber);
  15. }
  16. }
  17. }
  (2)在清单文件里面配置一下 
  
  
  1. <!--配置广播接收者 -->
  2. <receiver android:name="com.itheima.ipdail.OutGoingCallReceiver">
  3. <intent-filter >
  4. <action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
  5. </intent-filter>
  6. </receiver>
    (3)当我们配置的action 的事件发生了  onReceive方法就会执行 


3 广播接收者案例_sd卡状态监听
(1)定义广播接收者
   
   
  1. package com.itheima.sdcardstate;
  2. import android.content.BroadcastReceiver;
  3. import android.content.Context;
  4. import android.content.Intent;
  5. public class SdcardReceiver extends BroadcastReceiver {
  6. //当sd卡被卸载 或者被挂载上来的时候 会执行
  7. @Override
  8. public void onReceive(Context context, Intent intent) {
  9. //[1]获取到当前广播的事件类型
  10. String action = intent.getAction();
  11. //[2]对action做一个判断
  12. if("android.intent.action.MEDIA_UNMOUNTED".equals(action)){
  13. System.out.println("说明sd卡 卸载了");
  14. }else if ("android.intent.action.MEDIA_MOUNTED".equals(action)) {
  15. System.out.println("说明sd卡挂载了");
  16. }
  17. }
  18. }
(2)在清单文件配置一下 
   
   
  1. <receiver android:name="com.itheima.sdcardstate.SdcardReceiver">
  2. <intent-filter >
  3. <action android:name="android.intent.action.MEDIA_UNMOUNTED"/>
  4. <action android:name="android.intent.action.MEDIA_MOUNTED"/>
  5. <action android:name="android.intent.action."/>
  6. <!--想让上面的这2个事件生效 必须的加上这样的一个data -->
  7. <data android:scheme="file"/>
  8. </intent-filter>
  9. </receiver>
4 广播接收者案例_短信监听器
  (1)定义广播接收者
  
  
  1. package com.itheima.smslistener;
  2. import android.content.BroadcastReceiver;
  3. import android.content.Context;
  4. import android.content.Intent;
  5. import android.telephony.SmsMessage;
  6. public class SmsListenerReceiver extends BroadcastReceiver {
  7. //当短信到来的时候 就会执行这个方法
  8. @Override
  9. public void onReceive(Context context, Intent intent) {
  10. //[1]获取发短信送的号码 和内容
  11. Object[] objects = (Object[]) intent.getExtras().get("pdus");
  12. for (Object pdu : objects) {
  13. //[2]获取smsmessage实例
  14. SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdu);
  15. //[3]获取发送短信的内容
  16. String body = smsMessage.getMessageBody();
  17. //[4]获取发送者
  18. String address = smsMessage.getOriginatingAddress();
  19. System.out.println("body:"+body+"---"+address);
  20. //[5]比如发送短信 扣流量
  21. }
  22. }
  23. }
(2)在清单文件里面注册一下
  
  
  1. <receiver android:name="com.itheima.smslistener.SmsListenerReceiver">
  2. <intent-filter >
  3. <action android:name="android.provider.Telephony.SMS_RECEIVED" />
  4. </intent-filter>
  5. </receiver>

5 不同版本广播的特点
   (1)4.0之后的手机 谷歌为了更加安全考虑  要求第一次安装应用的时候必须有界面
  (2)在设置页面有一个强行停止的按钮 如果点击了 广播事件就不生效
  (3)在2.3的版本的手机没有这样的安全设计

6 广播接收者案例_卸载安装 
  09-08 03:26:15.926: E/AndroidRuntime(1152): java.lang.RuntimeException: Unable to start receiver com.itheima.bootreceiver.BootReceiver: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?

   
7 广播接收者案例_开机启动

8 有序广播和无序广播
无序广播:类似新闻联播:广播不可以被终止  数据不可以被修改 
有序广播:类似中央发送的红头文件  按照优先级一级一级的接收 有序广播可以被终止 数据可以被修改 

9 特殊广播接收者
  比如操作特别频繁的广播事件 屏幕的锁屏和解锁 电池电量的变化 这样的广播接收者在清单文件里面注册无效
09-08 07:25:42.239: E/ActivityThread(2173): Activity com.itheima.screen.MainActivity has leaked IntentReceiver com.itheima.screen.ScreenReceiver@b6486088 that was originally registered here. Are you missing a call to
 unregisterReceiver()?


10 样式和主题
   style  Theme 
   共同点:(1)定义的方式是一样的 
   不同点:(1)style作用范围比较窄 (控件 button textview)  theme 作用在activity或者Application节点下   


11 国际化 i18n 
小编 编辑  
国际化就是在res下创建对应国家环境目录 values-en .....

12常见对话框
 (1)普通对话框
   
  
  
  1. //构建AlertDialog
  2. AlertDialog.Builder builder = new Builder(this);
  3. builder.setTitle("警告");
  4. builder.setMessage("世界上最遥远的距离是没有网络");
  5. builder.setPositiveButton("确定", new OnClickListener() {
  6. @Override
  7. public void onClick(DialogInterface dialog, int which) {
  8. System.out.println("点击了确定按钮 执行的逻辑");
  9. }
  10. });
  11. builder.setNegativeButton("取消", new OnClickListener() {
  12. @Override
  13. public void onClick(DialogInterface dialog, int which) {
  14. System.out.println("点击了取消按钮");
  15. }
  16. });
  17. //最后一步一定要记得 show出来
  18. builder.show();

 (2)单选对话框
 (3)多选对话框
 (4)进度条对话框

补充 2种上下文的区别
this:mainActivity 子类 
getApplicationContext(): 返回Context 父类
对话框不能用 getApplicationContext();

13 Android中动画 
(1)属性动画
(2)补间动画 
(3)帧动画 
   就是加载一系列的图片资源  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值