Android电源管理Android电源管理 一、 相关概念 1. 出于节电的需要,一般应用在用户一段时间无操作的情况下屏幕变暗,然后进后休眠状态 2. 用户只能在”设置->声音和显示”中设置所有应用默认的屏幕亮度和进行待机的时间 3. 电源管理的实现分内核应用两部分,通过下面介绍的接口,我们可以设置应用程序的电源管理,以控制与其休眠相关的状态(是否需要进入休眠,调整cpu频率,键盘灯的开关,屏幕的亮暗等) 二、 设置电源管理常用的几种状态 三、 使用电源管理注意事项 1. 可在onCreate时设置该界面的电源管理,在onDestroy时取消设置 2. 可在onResume时设置该界面的电源管理,在onPause时取消设置 3. 注意设置是以Activity为单位,不是以应用为单位 4. 注意在AndroidManifest.xml中声明该应用有设置电源管理的权限 5. 注意加锁解锁要成对出现 6. 注意多个用途最好用多个锁,不要一锁多用,以免出错 7. 注意对运行在后台和异常时对锁的处理 8. 注意在网络连接或传输时最好加锁,以免传输被中断 9. 注意加锁以保证程序逻辑 四、 代码举例 1. 源码修改 1) 引入电源管理包,以使用相关类 2) 类中加入变量 3) 修改onCreate 4) 修改onDestroy 2. AndroidManifest.xml文件修改 11月16日
Android缩放drawable
一、 相关概念 1. Drawable就是一个可画的对象,其可能是一张位图(BitmapDrawable),也可能是一个图形(ShapeDrawable),还有可能是一个图层(LayerDrawable),我们根据画图的需求,创建相应的可画对象 2. Canvas画布,绘制的目的区域,用于绘图 3. Bitmap位图,用于图的处理 4. Matrix矩阵,此例中用于操作图片 二、 步骤 1. 把drawable画到位图对象上 2. 对位图对象做缩放(或旋转等)操作 3. 把位图再转换成drawable 三、 示例 11月11日
Android改变窗口标题栏的布局
一、 重点 二、 实例 a) 功能:把title设置成为一个字串和一个按钮的组合 b) 修改xxActivity.java代码 c) 填加title.xml代码 三、 注意 a) 注意设置顺序 b) 注意requestWindowFeature(Window.FEATURE_CUSTOM_TITLE)不要和其它对TITLE的设置requestWindowFeature(xxxx)一起使用
11月9日
Android程序中使用定时器Timer
一、 重点 1. 如何使用handler和message 2. 如何延时调用 1) 使用延迟发消息的方式 2) 也可以使用android.util.Timer与handler相结合的方式 二、 举例 1. 功能:实现一个应用界面,在用户长按触模屏两秒后,打出Log信息 2. 步骤: 1) 建立project a) 在eclipse中点击菜单File->New->Project…… b) 选择Android Project按Next c) 填写project的各项内容如下 2) 修改TestXy.java代码如下 3) 运行 a) 在eclipse中点击菜单Run->Run Configurations…… b) 双击左边的Android Application,产生了一个New Configuration,点开它填写内容如下: c) 点击Apply,然后点Run,多等一会儿就出来了 d) 此时点击右上的DDMS,可看到Log信息,在长按屏幕两秒后,可看到刚才加入的Log信息
动态改变Android控件大小一、 方法 使用getLayoutParams() 和setLayoutParams()方法 二、 示例代码 三、 原理 a) getLayoutParams() 和setLayoutParams()都是控件基类view的public方法,在外部也可以直接调用 b) 由于LayoutParams一般是在加入容器中设置的,所以容易混淆我们所指定的布局属性究竟是保存在容器中,还是控件本身的属性,答案是控件本身。但是在设置时还是要注意布局属性与容器种类密切相关 如何新建和使用Android控件一、 重点 如何在layout(xml)中使用自定义的控件 二、 举例 1. 功能:实现一个新的浏览器控件,使点击浏览器中任何位置都能打印Log信息 2. 步骤: 1) 建立project a) 在eclipse中点击菜单File->New->Project…… b) 选择Android Project按Next c) 填写project的各项内容如下 2) 继承一个已有控件,加入新的属性和方法 a) eclipse左侧:test_xy->src->com.android.test 点右键 New->class b) 建立新控件:Name: MyWebView,其它使用默认选项 3) 修改xml文件 a) eclipse左侧:test_xy->res->layout->main.xml修改其中内容如下 4) 运行 a) 在eclipse中点击菜单Run->Run Configurations…… b) 双击左边的Android Application,产生了一个New Configuration,点开它填写内容如下: c) 点击Apply,然后点Run,多等一会儿就出来了 d) 此时点击右上的DDMS,可看到Log信息,在触摸WebView控件时,可看到刚才加入的Log信息
修改android公共控件和后台服务1. 位置 2. 修改 3. 替换 4. 使新的包生效 a) 方法1: b) 方法2: 5. 注意 a) 绝大多数情况下都能成功,不过最好在替换前备份原有jar包 b) 如果替换重要的包使机器不能启动到桌面了,可以通过重新打包system.img,然后重新烧写(fastboot)到系统中解决此问题,注意system.img的大小 建立Android SDK开发环境建立SDK开发环境
一、 系统平台 二、 安装JDK 1. 为什么使用JDK 2. 安装方法 使用ubuntu安装包 4. 测试是否安装成功 三、 安装Android SDK 1. 为什么使用Android SDK 2. 安装 1) 注意选择你所使用平台和硬件对应的版本 2) 下载 3) 安装 3. 运行 4. 设置路径 5. 创建并使用模拟的500M SD卡 6. 缩放屏幕0.5倍 7. SDK目录结构 1) Add-ons 2) Docs,documention.html 3) Platforms 4) Tools 5) Usb_driver 四、 安装eclipse 1. 为什么使用eclipse 2. 安装 1) 下载 2) 解压 3) 运行 3. 安装android的eclipse插件 1) 在eclipse中点击菜单Help->Software Updates…… 2) 切换到Available Software标签,点Add Site……按钮 3) 在弹出的对话框里输入https://dl-ssl.google.com/android/eclipse/,然后按OK 4) 选项新出新的Developer tools然后点Install…… a) Android Developer Tools b) Android DDMS(Dalvik Debug Monitor Service) 5) 点Next,然后Finish 6) 重新启动Eclipse后生效 4. 指定Android SDK对应的目录 1) 在eclipse中点击菜单Window->Preferences 2) 左侧选Android,右侧选Browse……,指定你android SDK的安装目录 3) 点击Apply,然后点OK 五、 配置AVD(Android Virtual Device) 1. 用于配置一些模拟器的特性:模拟器影像大小/触摸屏/轨迹球/摄像头/屏幕分辨率/键盘/GSM /GPS/Audio录放/SD卡支持/缓存区大小等 2. 如果用SDK1.5可能出现提示让你建立AVD 六、 第一个android程序 1. 建立project 1) 在eclipse中点击菜单File->New->Project…… 2) 选择Android Project按Next 3) 填写project的各项内容如下 2. 填写代码 3. 运行 1) 在eclipse中点击菜单Run->Run Configurations…… 2) 双击左边的Android Application,产生了一个New Configuration,点开它填写内容如下: 3) 点击Apply,然后点Run,多等一会儿就出来了
建立Android源码开发环境Android源码的编译 一、 配置环境 1. 磁盘 2. Linux系统 Ubuntu 6.06以上版本,我用的是buntu 8.04,具体请见下篇文档《ubuntu系统的使用》 3. Git工具(Git 1.5.4以上版本) 4. Java环境(JDK 5.0 update12以上版本) 5. Python (Python 2.4以上版本) 6. 依赖的deb包 7. 调试工具 二、 下载及编译运行android源码 1. 下载安装脚本 2. 用安装脚本下载源码 3. 编译 1) 正常编译 2) 可能出现的问题及解决方法 1. make若提示找不到-lncurses,则需要做以下链接 2. make若提示找不到run-java-tool,则需要设置java的安装路径 3. 若提提示找不到zlib.h, 则运行如下命令安装zlib开发包 4. 下了一个最新版本后显示说只能使用java-1.5版本,于是从1.6版本降回1.5 5. 如果报错 "compression requires the missing zlib module" 可能是python找不到zlib库 3) 编译sdk 4) 编译不同Android硬件平台对应版本 4. 运行 1) 运行普通的虚拟器emulator 2) 指定img运行 三、 常用的源码文件 1. frameworks/base/core/java/android/widget/下边 2. package/apps 3. out/target/product/generic/system/apps/*.apk 四、 参考 1. 官方网站的安装说明
11月6日
android源码中常用于参考的代码在应用开发时,常遇到有些功能不知是否能实现,不知如何实现的问题,在网上资料又不多的情况下,可以用参考已有源码的方式来解决这些问题,经常参考的目录如下
1、 系统控件的实现:了解有什么控件,控件的功能,功能如何实现 2、 应用程序的实现:Android系统中所有的应用程序都在这里实现,了解它们如何实现 3、 系统提供的例程:各种类型程序的实现范例
11月3日
Android常用工具一、 Log 1. logcat不同级别的打印信息,级别如下 2. 如何在log里打行号和时间 二、 Adb 1. 把程序装手机里:一般程序装apk即可 1) 手机打开,边上usb线,直接连上电脑 2) 系统ubuntu 8.04 3) 使用命令adb devices看设备是否连上了 4) 注意:如果你有多个SDK,千万要使用匹配的adb命令,最好用绝对路径,否则很容易得到提示说找不设备,如果说找不到adb,请尝试以下方法 2. adb常用参数 1) adb devices 2) adb pull <A> <B> 3) adb push <B> <A> 4) adb remount 5) adb install 包名 6) adb shell 3. adb shell 1) 看当前log信息 2) 在adb shell用普通shell命令 3) android上的网络调试 a) # ping b) # ifconfig 4) 数据库使用与调试 a) 操作数据库 b) 查看数据字典
Android基本组件及其交互一、 Android的基本组件 1. Activity 2. Service 3. Broadcast 4. Content Provider 二、 组件间的通讯 1. ContentProvider用于提供,ContentResolver用于调用 2. Intent 1) Activity相互调用 2) Activity与Broadcast相互调用 3) Activity与Service相互调用
Android界面开发一、 界面元素 1. 窗口:Activity 分类:基本Activity,带内容的Activity(如ListActivity) 2. 对话框:Dialog 1) 常用对话框: 2) 相关函数: 3. 菜单:Menu 1) 常用菜单: 2) 相关函数: 4. 可视化控件:View 1) 常用控件: 2) 数据绑定:adapter 5. 其它界面元素 二、 布局的实现 1. LinearLayout:线性的布局方式 2. GridView:网格布局 3. TableLayout:表格布局 4. AbsoluteLayout:绝对坐标布局 5. RelativeLayout:相对坐标布局 6. FrameLayout:单帧布局 三、 事件响应 1. 用注册回调函数的方式响应事件 2. 如果没被任何一个View处理,则由Activity处理 3. 常用事件处理 1) onKeyDown() 2) onKeyUp() 3) onTrackballEvent() 4) onTouchEvent() 四、 应用软件代码结构 1. res:资源 1) layout:存放布局用的xml文件 a) 布局就像容器,里面可以装下很多控件,每个控件又有布局,字体设定, b) 默认的布局文件main.xml 2) drawable:存放图片图标 3) values:存放常量的xml文件(如字串) 2. src:代码 3. AndroidManifest.xml 1) 应用程序的java包名 2) 应用程序中所含组件(Activity, Service, BroadcastReceiver, ContentProvider) 3) 应用程序调用其它程序时的权限 4) 应用程序被其它程序调用时对其它程序的权限要求 5) 使用Android API的最低版本 6) 应用程序依赖的库 五、 国际化的支持(多语言) 1. 在系统中如何设置本地语言 2. 在程序中如何加入多语言支持 3. 在不改变系统设置的前提前,测试当前应用对某一语言的支持 六、 常见问题及解决方法 1. android.app.Application 2. 用别人写的java文件改出自己的,R.xx报错 3. android中可以使用java中的类吗 4. layout中的控件与程序中控件的关系 5. 布局冲突 七、 android是重要的包
Android模拟器调试与真机调试一、 模拟器调试与真机调试 1. 模拟器调试 2. 真机调试 1) 用usb线连接G1硬件和PC 2) 若是windows系统,则安装驱动 3) 用源码或SDK中的adb命令看硬件是否连接成功 4) 注意: a) 在Linux连接真机时需使用root权限 b) 如果之前连接过模拟器,最好连接前先杀掉adb后台进程 3. Eclipse中调试 4. 命令行中使用adb工具调试 Android系统文件结构一、 镜像文件image 1. 如何得到镜像文件 1) 编译android源码之后,在out/target/product/generic产生 2) SDK的platforms\android-*\images 2. 各镜像文件的含义 1) system.img是由 system目录打包压缩得到的,以只读方式挂载。 2) userdata.img是由 data目录打包压缩得到的,以读写方式挂载,用于存放用户数据,用户安装的软件包在被装在这里。 3) ramdisk.img是模拟器的文件系统,把ramdisk.img解压出来可知道,ramdisk.img里的文件和根文件夹的文件基本一样。 3. 镜像文件的挂载顺序 4. 如何更改系统的镜像文件 1) 模拟器 2) 真机 二、 系统目录说明 1. 应用程序安装目录 1) 系统应用程序所在目录 2) 用户安装应用程序所在目录 3) 注意: a) 在模拟器中,每重启一次,/system/app/下的应用都会被还原,有时/data/app下也会被清除 b) 若在/system/app和/data/app下有重名的应用,不一定会启动哪一个,尤其是在adb install杀死正在运行的程序时,有时旧的就会被启动 2. 用户数据所在目录 3. SD卡对应目录
安装和卸载Android应用程序(apk包)
一、 安装
1. 安装第三方应用 2. 安装系统应用 二、 卸载 1. $ adb uninstall 包名 // 包名形如com.android.testme 2. Home->设置->应用程序->管理应用程序->选择某应用程序->卸载 三、 相关文件 1. /system/app/apk文件 2. /data/app/包名.apk 3. /data/data/包名 4. /data/dalvik-cache/组合名.dex 5. /data/data/com.android.launcher/databases/launcher.db 四、 apk的格式 10月12日
从c++到java (二)学习JAVA编程(二)
一、 JAVA特性和习惯用法 1. 指针 2. 地址传递和值传递 3. 手动回收资源 4. 内嵌类(一个类中声明另一个类) 1) 内嵌类可以放在类中的任意一个位置,程序都可以找到它 2) 内嵌类的好处 5. 匿名内嵌类(anonymouse inner class) 1) 没有具体名字的内嵌类,因为只使用一次,所有一般不命名 2) 写法 3) 运行时生成内嵌类的class文件,形如 6. 事件处理 1) 引入java.awt:事件处理包 2) 需要设置listener和handler 3) 任何一个对象都可以被监听(addListener), 当它listen的事件发生时就调add时指定的handler处理 7. 多线程 1) 继承Thead类 2) 关键的方法 3) 线程执行优先级1-10 4) 在外部使用它 8. 界面 1) 引入java.swing;JFC (用于在java中开发界面) 2) 由于基类原因,控件即可以draw也可以做为contrainer 二、 JAVA对应语法 1. 类的引入 1) 在某一类(文件)中想使用其它类时(如同C语言中的包含头文件) 2) 使用import关键字,形如 2. 工具函数的写法 3. 枚举 近似类的写法,形如: 4. 宏定义 5. ifdef
从c++到java (一)学习JAVA编程(一)
一、 目的 1. 不了解程序的流程:编译,执行,如何代码组织 2. 看不懂别人写的程序:重要的关键字不认识 3. JAVA的特性和习惯用法:不明白什么意思 4. 某些功能不知如何实现:找不到JAVA对应的语法 二、 流程 1. 组织代码 1) 以类组织 2) 程序入口 3) 文件类型 a) *.java b) *.class c) *.jar 2. 编译 3. 执行 1) 运行xxx.class 2) 运行xxx.jar 三、 关键字 1. this与super 1) this指当前对象,super指它的父类 2) super用法 a) 放在构造的头一句,调用它父类的构造函数(注意只能放在头一句) b) super.func(xxx)是调父类的一个函数,通常用于本类中重写(override)了父类的函数,用此方法调用其父类中的该函数 2. try, cache, finally 1) try:把可能出错的代码放在try {}里,有些代码加了try就可以编译通过了 2) cache:把错误处理放在catch (xxx) {}中,可有多个catch同时存在,过不同参数指定不同错误的处理 3) finally:无论发没发生意外,finally{}都被执行,它用来释放try申请的资源(如操作数据库时) 3. abstract class(抽象类)与instance class(具体类) 1) instance class可以实例化,abstract class不能实例化 2) abstract class里边抽象的方法用public abstract func();它定义了方法,但没有实现,就是C++里的纯虚函数 4. abstract class与interface 1) 它们都用于实现多样性(Polymorphism),即继承它的类实现各有不同 2) interface可以虚拟多重继承而abstract class不能 3) abstract class可以有自己的数据成员,也可以有非abstract的成员方法,而interface方式实现中,只能有静态的不能被修改的数据成员(static final),所有的成员方法都是abstract的 4) 本质不同:abstract的父子类间本质相同,而interface只是定义了某个方法约定或者说是性质 5. extends与implements 1) extends:继承父类,只要那个类不是声明为final或者那个类定义为abstract的就能继承 2) implements:JAVA中不支持多重继承,但是可以用interface来实现,这样就要用到implements,继承只能继承一个类,但implements可以实现多个接口,用逗号分开就行了,形如: 3) extends用在类名和接口名前 6. throw与throws 1) 它们java处理异常方式 2) throw用在try后面 3) throws用在一个方法后面 7. final 1) 用于修饰非抽象类,非抽象方法和变量 2) final类:不能被继承,final类的方法默认是final的 3) final方法:不能被子类方法覆盖,可以被继承,编译时被转入内嵌机制,提高执行效率 4) final变量:只能被赋值一次,之后不能再改变 8. static 1) 用于修饰成员变量和成员方法 2) static变量和方法独立于该类的任何对象,被类的所有实例共享,所以不需要声明任何对象就可以访问,形如: 3) 注意静态方法不能用this和super关键字 4) static方法必须被实现,不能是抽象的 9. layout |
|