1、从零开始学android之我的android 笔记3G(3th Generation)指的就是第三代数字通信,是将无线通信于国际互联网等多媒体通信结合的新的一代通信技术标准。符合这个标准的技术有WCDMA、CDMA2000、TD-SCDMA这三种无线接口标准。中国联通使用的是WCDMA(世界上大部分3G网络都采用的是该标准)使用联通上网时手机上有的会显示一个H(HSDPA)标示,这是加强版的3G。中国电信使用的是CDMA2000 (日、韩和北美使用)辐射小信号强;中国移动使用的是具有自主知识产权的TD-SCDMA(只有中国才使用)为了推广TD-SCDMA产生了国产手机操作系统ophone,op
2、hone支持html widget和gif,只是ophone在续航和界面存在不足,目前使用不多。相对第一代模拟制式手机(1G)和第二代GSM、CDMA等数字手机(2G),3G手机能处理图像、音乐、视频等多种媒体形式,提供包括网页浏览、电话会议、电子商务等多种信息服务。 3G网络与前两代的主要区别是在传输声音和数据的速度上有很大的提升(最大下行速度2.4M/s)。 现在的手机大多还是2.5G手机,符合2.5G网络的接口标准有CDMA2000 1X和GPRS,中国联通使用的是CDMA2000 1X标准,中国移动使用的是GPRS标准。目前,可以把2.5G移动通信技术看作是2G迈向3G的衔接性技术,在
3、2.5G网络下出现了如WAP、蓝牙(Bluetoot) 等技术。Android系统今后将继续每半年一次的升级步伐,分别定在每年的夏天和年终。每代Android系统都将以甜点命名.比如:1.5版叫做Cupcake(纸杯蛋糕)1.6版为Donut(甜甜圈)2.1版的clair(闪电泡芙,一种法式奶油夹心甜点),此版本曾被叫做Flan“水果馅饼”2.2版的Froyo(冻酸奶)2.3版的Gingerbread(姜饼)添加了sip通话的支持,在省电上下了功夫,做成了黑色主题3.0版的Honeycomb(蜂巢)主要是针对平板电脑,为平板和手机的整合做准备,有了对设备的判断开关4.0版的Ice cream
4、SandWich(简称ics,冰激凌三明治) 统一版本,电视手机平板融合以CDEFG字头顺序排列.Donut将把社交网络功能作为升级重点,在手机的各种体验中都增加社交网络元素Android体系结构:Android使用了开源的opensource音频编解码工具以库文件(.so)封装到Lib层的meda框架Android使用的是Dalvik vm虚拟机,它和jvm相比更适合手机开发环境的搭建所需开发环境:JDK 5或以上版本(仅有JRE不够) 、Eclipse 3.6 或以上版本下载用于在Eclipse 开发android应用的ADT 插件 在企业开发中,很多程序员使用Eclipse IDE作为应
5、用的开发环境。为了使得Android应用的创建,运行和调试更加方便快捷。Android的开发团队专门针对Eclipse IDE定制了一个插件:Android Development Tools(ADT) 下载地址:安装 Eclipse 插件 (ADT)启动 Eclipse,选择 Help Install New Software,在出现的对话框里,点击Add按钮,在对话框的name一栏输入“ADT”, 然后点击Archive.,浏览和选择已经下载的ADT插件压缩文件。 点击 OK.。返回可用软件的视图,你会看到这个插件,然后选择Developer Tools (会选中下面的“Android D
6、eveloper Tools”和 “Android Editors“),点击 Next,最后重启 Eclipse。下载安装Android SDK(stand develop kits ):Android SDK包含了开发Android应用所依赖的jar文件、运行环境及相关工具。 下载地址: 下载完SDK后,把.zip文件解压到你电脑上合适位置。启动 Eclipse,选择window-preferences,在打开的视图左边点击android,在右边的SDK Location中选择Android SDK所在位置。要注意的是adt和sdk的版本一定要相符合否则不能创建android程序模拟器 vs
7、 虚拟机模拟器:模拟一些收发信息拨打电话等的操作 模拟的环境 不能代表真机虚拟机 vmware 虚拟出来的网卡 内存 处理器等相当于真机虚拟机的功能 模拟器的功能 开发中常用的屏幕分辨率:HVGA 800 * 480 QVGA 320 * 240 WHVGA 854 * 480 在android的sdk目录下platform-tools中有一些sdk提供的工具adb.exe : android debug bridge ( android 调试桥)在dos下使用socket 连接到模拟器上. 提供一些列的工具帮助我们调试程序 adb的命令adb install xxx.apk 如果有多个设备,
8、可以指定设adb install s emulator-5554 D:/xxx.apkadb uninstall 卸载一个apk 的包名 adb logcat 打印日志信息adb devices 命令 列出来当前所有可用的设备 adb shell 挂载到linux的空间 adb kill-serveradb start-server 重新启动一个现有的连接。如果经常报出远程主机强迫关闭了一个现有的连接的错误很可能就是安装了豌豆荚类似的程序,因为这些程序会在C:/system32中安装一个adb,这个adb版本比较低的话就会出现一些问题aapt :android application pack
9、age tools (android 应用程序打包工具)把class打包成apk文件class - dex - res里面的资源 -apk 过程如下图:DDMS工具集 : dailvk debug manager system (dailvk 调试工具集)在ddms视图下可以查看和调试正在运行的模拟器android list targets列出可以使用的 sdk的版本android调出android manager视图emulator avd advname 启动模拟器 例如:emulator avd 2.2 (2.2 为创建设备的名称) mkmdcard 20m d:/sdcard.img
10、创建sdcardadb pull adb push android create avd name android2.2 target 8 创建模拟器3G: android手机 数据信道和通讯信道是分开的.这在ddms视图下EmulatorControl中的TelephonyStatus就能看到关联源码:在sdk相应的版本下的目录下建立source文件夹把源码解压进去就行了目录结构src 存放源文件gen 目录编译器帮助我们自动生成的java文件 gen 目录中存放所有由Android开发工具自动生成的文件。目录中最重要的就是R.java文件。 这个文件由Android开发工具自动产生的。An
11、droid开发工具会自动根据你放入res目录的资源,同步更新修改R.java文件。正因为R.java文件是由开发工具自动生成的,所以我们应避免手工修改R.java。R.java在应用中起到了字典的作用,它包含了各种资源的id,通过R.java,应用可以很方便地找到对应资源。另外编绎器也会检查R.java列表中的资源是否被使用到,没有被使用到的资源不会编绎进软件中,这样可以减少应用在手机占用的空间。android2.2 指定依赖的jar包.project.properties target=android-8 指定编译的jar包的等级 assets 存放一些资源文件 (不经过编译的资源文件)an
12、droid除了提供/res目录存放资源文件外,在/assets目录也可以存放资源文件,而且/assets目录下的资源文件不会在R.java自动生成ID,所以读取/assets目录下的文件必须指定文件的路径,如:file:/android_asset/xxx.3gpres 存放也是资源文件 编译这些资源文件 在R文件中生成引用在这个目录中我们可以存放应用使用到的各种资源,如xml界面文件,图片或数据。res/drawable 专门存放png、jpg等图标文件。在代码中使用getResources().getDrawable(resourceId)获取该目录下的资源。res/layout 专门存放
13、xml界面文件,xml界面文件和HTML文件一样,主要用于显示用户操作界面。res/values 专门存放应用使用到的各种类型数据。不同类型的数据存放在不同的文件中,如下: strings.xml 定义字符串和数值,在Activity中使用getResources().getString(resourceId) 或getResources().getText(resourceId)取得资源。它的作用和struts中的国际化资源文件一样。 传智播客 arrays.xml 定义数组。 red yellow green blue colors.xml 定义颜色和颜色字串数值,你可以在Activity
14、中使用getResources().getDrawable(resourceId) 以及getResources().getColor(resourceId)取得这些资源。例子如下: #ff0000 dimens.xml 定义尺寸数据,在Activity中使用getResources().getDimension(resourceId) 取得这些资源 50dip styles.xml 定义样式。 18sp #0066FF res/anim/ 存放定义动画的XML文件。res/xml/ 在Activity中使用getResources().getXML()读取该目录下的XML资源文件。res/r
15、aw/ 该目录用于存放应用使用到的原始文件,如音效文件等。编译软件时,这些数据不会被编译,它们被直接加入到程序安装包里。 为了在程序中使用这些资源,你可以调用getResources().openRawResource(ID) , 参数ID形式:R.raw.somefilename。bin 目录 生成class文件和生成的apkAndroid程序执行流程(任何java程序执行 main())1.应用程序被安装到模拟器上 操作系统就会读取apk里面的manifest文件注册到系统中 2. 操作系统的框架中会根据这个manifest生成一个main() 根据清单文件 -找到包名类名 -反射-cla
16、ss.newInstence();3.调用activity的 oncreate();4. setContentView(R.layout.main); Android是面向组件的Intent intent = new Intent();/创建了一个意图intent . setAction();/设置动作intent . setData(Uri);/设置Uri类型的数据startActivity(intent);/启动更改sdcard的目录在创建时点击file制定文件夹(路径不要中文)如果eclipse出现如下错误:很可能就是安装的jdk和eclipse的不匹配解决方案:在eclipse目录下删
17、除eclipse.ini再打开eclipse自动根据jdk生成Android的布局:LinearLayout (线性布局)、AbsoluteLayout(绝对布局)、RelativeLayout(相对布局)、TableLayout(表格布局)、FrameLayout(帧布局)Android的显示单位: px (pixels)像素 一般HVGA代表320x480像素,这个用的比较多。 dip或dp (device independent pixels)设备独立像素,这个和设备硬件有关,一般为了支持 WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。 sp (scaled pixels be
18、st for text size)比例像素,主要处理字体的大小,可以根据系统的字体自适应。除了上面三个显示单位,下面还有几个不太常用: in (inches)英寸 mm (millimeters)毫米 pt (points)点,1/72英寸为了适应不同分辨率,不同的像素密度,推荐使用dip ,文字使用sp。在拨打电话时要注意的地方:Intent intent = new Intent();intent.setAction(android.intent.action.CALL);/直接拨打出去intent.setAction(Intent.ACTION_DIAL);/显示在拨打面板上等待拨打in
19、tent.addCategory(android.intent.category.DEFAULT);intent.setData(Uri.parse(tel:+phoneNumber);startActivity(intent);在发送短信的时候要注意的地方:SmsManager sms = SmsManager.getDefault();/短信管理器List messageBodys = sms.divideMessage(messageContent);/对长信息切割 for(String messageBody:messageBodys)/循环发送/信息发送的三个方法 sms.sendT
20、extMessage(destinationAddress, scAddress, text, sentIntent, deliveryIntent); sms.sendDataMessage(destinationAddress, scAddress, destinationPort, data, sentIntent, deliveryIntent); sms.sendMultipartTextMessage(destinationAddress, scAddress, parts, sentIntents, deliveryIntents); 真机部署:真机部署时常用的手机型号: 两年前
21、:三星 i5700 2.1 800*480 比较高端:htc g3 800*480 比较高端:索爱 x10i fwvga 854*480 比较低端:华为 u880 320*240 比较低端:三星galexy fit 320*2401:安装手机驱动 Google官方手机nexus 或者g1 的驱动在sdk/driver/usb 其他的手机要在其官网上下载驱动安装后在我的电脑设备管理器中的导航栏中能看到 命令行adb devices中也就能看到真机的设备2:然后在setting的应用程序中勾选未知来源,在setting的开发中勾选usb调试,否则不能安装程序,如果用的着话也要勾选允许模拟位置选项,
22、然后就能像是在使用模拟器一样使用真机了Android测试:黑盒测试:不关心程序代码只注重程序功能,记录了操作的步骤和产生crash的地方,实际 中用的比较多白盒测试:根据程序的代码 去写相应的测试逻辑 白盒测试根据测试粒度不同分 单元测试 function test 集成测试 intergration test 压力测试 测试工具:monkey. 单元测试:测试类继承AndroidTestCase,并把异常抛出去给测试框架在应用清单中配置:在节点下配置在节点外配置Android数据存储:数据的存储是有关流对象的处理在android中可以通过context获得输入输出流cotnext.openF
23、ileInput(name);cotnext.openFileOutput(name, Context.MODE_PRIVATE);获得的输出流的路径在rom(手机的内置硬盘大小在1G左右)/程序的包名/files如果要在sdcard上存储数据就要显式的构造出流对象,而不同的版本的模拟器的sdcard的位置是不同的android2.1 是/sdcard/ android2.2 是/mnt/sdcard/ ,要获取sdk的版本号可以通过android.os.Build的类中的常量获得,再根据版本号制定路径,一个更好的做法就是通过Environment类的方法和常量去判读sdcard的状态等信息E
24、nvironment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);/sdcard开是否可用Environment.getDataDirectory();/获取sdcard的目录Android文件的权限:modeprivate -rw-rw-modeworldreadable -rw-rw-r-modworldwriteable -rw-rw-w-read/writeable -rw-rw-rw-Context.MODE_APPEND 文件一旦被创建出来 ,以后以追加的模式 去访问文件每一个apk 他在android操作
25、系统运行的时候 操作系统会给每个应用程序分配一个uid在ddms视图的fileExplorer的permission中:d 开头的代表目录- 开头的代表文件 除了d意外的九个字符分为3组 当前用户 - 用户所在的组- 所有其他的人rwx的含义是 r:可读 w :可写 x:可执行这是模仿的linux权限的管理模式Pull解析xmlAndroid已经集成进了Pull解析器,无需添加任何jar文件。android系统本身使用到的各种xml文件,其内部也是采用Pull解析器进行解析的。 Pull解析器的运行方式与 SAX 解析器相似。它提供了类似的事件,如:开始元素和结束元素事件,使用parser.n
26、ext()可以进入下一个元素并触发相应事件。跟SAX不同的是, Pull解析器产生的事件是一个数字,而非方法,因此可以使用一个switch对感兴趣的事件进行处理。当元素开始解析时,调用parser.nextText()方法可以获取下一个Text类型节点的值加载xml this.getClass().getClassLoader().getResourceAsStream(person.xml)解析xmlXmlPullParser pullParser = Xml.newPullParser();pullParser.setInput(is, UTF-8);int flag = pullPars
27、er.getEventType();while(flag != XmlPullParser.END_DOCUMENT)switch (flag) /逻辑判断 flag = pullParser.next();生成xmlXmlSerializer serializer = Xml.newSerializer(); File file = new File(Environment.getExternalStorageDirectory(),persons.xml); FileOutputStream os = new FileOutputStream(file); serializer.setOu
28、tput(os, utf-8); serializer.startDocument(UTF-8, true); serializer.startTag(null, persons); for(Person person:persons) serializer.startTag(null, person); serializer.attribute(null,id, person.getId()+); serializer.startTag(null, name); serializer.text(person.getName(); serializer.endTag(null, name); serializer.startTag(null, age); serializer.te
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1