pro  android  media  developing  graphics,music,video and  rich media  apps  for  smartphones  and  tablets

第一章  android  introduction
    platform  include  4  part:操作系统、中间件、用户界面和应用软件。基于Java并运行在Linux内核上的操作系统。google公司内置了很多有用的软件,如打电话、发短信等



  开发手机联盟:  Open  Handset Alliance


模拟器:
  不支持呼叫和接听实际来电,但可以通过控制台模拟电话呼叫。
  模拟器不支持USB连接
  模拟器不支持相机/视频捕捉
  模拟器不支持音频输入(捕捉),但支持输出(重放)
  模拟器不支持扩展耳机
  模拟器不能确定连接状态
  模拟器不能确定电池电量水平和充电状态
  模拟器不能确定SD卡的插入和弹出。
  模拟器不支持蓝牙。


   debug:a  c盘空间不足  清理 C:\Documents and  Settings\“用户名”\Local  Settings\Temp\AndroidEmulator 文件夹的内容。
   在eclipse里可以直接单击运行提高速度。
   资源  android.com 
   中文资源  eoeandroid.com


第二章  环境搭建
   Emulator 模拟器   apk文件 运行在Android平台


谐音记忆   android  爱pk aapt  (apk) 运行在Android
  


AVD(Android  Vitual Device)
cmd    android list targets  列出可用平台


linux安装:sudo  apt-get  install  sun-java6-bin


  apt-get是一条linux命令,适用于deb包管理式的操作系统,主要用于自动从互联网的软件仓库中搜索、安装、升级、卸载软件或操作系统。   apt-get命令一般需要root权限


执行,所以一般跟着sudo命令 






第三章  android  SDK介绍
  Dalvik  Debug Monitor Service  调试监视服务  ddms.bat
   Android  Debug  Bridge(adb)  调试桥
   aapt.exe   android  Asset  Packaging Tool  aapt工具创建apk文件,这些文件包含了Android应用程序的二进制文件和资源文件。
   Android 接口描述语言  aidl.exe
  sqllite3.exe  Android应用程序可以创建和使用SQLite数据文件


   android.jar  是包含全部API的压缩包。
   samples      目录下是SDK附带的一些例子
API结构的划分  app  content  database  graphics  hardware
Traceview.bat  跟踪显示工具
dx.bat  将class字节码重写为Android字节码  存储在dex文件中。
activityCreator.bat   生成Ant构建文件
Android  Virtual  Devices AVD




android.util  包含一些底层辅助类,例如,特定的容器类、xml辅助工具类等。
android.os  提供基本的操作服务,消息传递和进程间通信IPC
android.graphics 作为核心渲染包,提供图形渲染功能。
android.text  文本处理工具,富文本
android.database  底层API处理数据库
android.content  提供各种服务访问数据在手机设备上元素 
android.view  核心用户界面框架
android.widget 提供标准用户界面  lists  buttons  layout managers (你爸奶妈)
android.app  提供高层应用程序模型,实现使用Activity
android.provider  提供方便调用系统提供的content  providers的接口
android.telephony  提供包含API交互和手机设备的通话接口。
android.webikit  包含一系列工作在基于Web内容的API


GOOGLE基于基站的定位技术——MyLocation


第4章   Android  Market及应用发布


第5章    HelloWorld


第6章  Android  应用程序结构介绍


Android  本身提供了桌面(Home)、联系人(Contact)、电话(Phone)和浏览器(Browers)等众多的核心应用。


Android的核心系统服务依赖于Linux2.6内核,如安全性、内存管理、进程管理 、网络协议栈和驱动模型。Linux内核也同时作为硬件和软件栈之间的抽象层。


Android程序主要由下列4部分组成:
Activity  一般代表手机屏幕的一屏。如果把手机比作个浏览器,它就相当于一个网页。Activity 之间的跳转有可能返回值。
        Android 会把每个应用的开始到当前的每一个屏幕保存在堆栈中。
Broadcast Intent  Receiver
Service
Content Provider


(谐音:爱把CS)


BroadcastReceiver通过NotificationManager来通知用户这些事情发生了。既可以在AndroidManifest.xml中注册,也可以在运行时的代码中使用Context.registerReceiver()进行注



R文件对下边即将介绍的资源进行全局索引。在下面介绍的res文件夹中,内容发生任何变化.R.java都会重新编译,同步更新。
AndroidManifest.xml  应用的配置文件。


第7章  Android 基本组件介绍
  Activith是一个UI的容器
  视图组件View
  视图容器组件Viewgroup
  布局组件Layout
  布局参数LayoutParams






setContentView(R.layout.main) 负责当前的Activity与main.xml文件相关联。
Android:layout_width="fill_parent"填充满父容器的空间,wrap_content 只需要将bg.jpg包裹起来即可。
dip device  independentpixels  依赖于设备的像素。
px  pixels 像素
sp  scaled  pixels-best  for  text  size 带比例的像素
pt 




LayoutInflater  inflate=(LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE)
得到一个LayoutInflater对象。这个对象可以对XML的布局文件进行解析,并且生成一个VIEW.
所有的LayoutParams都是继承Android.view.ViewGroup.LayoutParams


widget:
   Spinner  下拉列表  wrap_content  高度自适应
   AutoCompleteTextView   自动完成文本 
   日期选择器  DatePicker 介绍与应用
   时间选择器 TimePicker的介绍与应用
   滚动视图  ScrollView的介绍与应用
   ProgressBar 进度条
   SeekBar  拖动条
   RatingBar  评分组件
   ImageView 介绍与应用
   ImageSwithcher&Gallery  切换图片  在使用ImageSwitcher之前,一定要调用setFactory方法,否则,setImageResource这个方法会出现空指针异常。
   GridView 网格视图
   Tab  标签的介绍与应用
   menu


  Android应用的灵魂——intent 和Activity
intent  一次即将操作的抽象描述
  3个作用 a  启动一个新的Activity并且可以携带数据
          b  通过intent来启动一个服务service
          c  通过intent来广播一个事件
    Bundle类型使用起来有点像HashMap    类型安全的容器。它是对HashMap做了一层封装。但Bundle存入的只能是基本类型。


  ListView  列表
——————————————————————————————————
ArrayAdapter是ListAdapter直接子类
————————————————————————————————————


  
  ArrayAdapter
  SimpleAdapter
  SimpleCursorAdapter




 Dialog   对话框
AlertDialog
ProgressDialog




Toast和Notification应用
Toast虽然也是提醒用户的一种方式,但是在实现上和Notification不一样,后者需要NotificationManager所管理。而Toast是作为Android中的Widget存在的。
  首先实例化一个Toast  Toast  toast=new  Toast(this)来实现
  第二  每一个Toast都可以和一个View相关,如toast.setView(view)
  第三  Toast的显示长途有长有短,
  第四 设置好属性后,就可以Toast显示出来,通过Toast.show()系统就会显出这个Toast。
  最后  当写完代码后需要在AndroidManifest.xml文件中加入对振动的权限控制。要不然程序会因为没有振动权限而报错。实现代码如下:
<uses-permission Android:name="Android.permission.VIBRATE" />




第8章  移动信息仓库——Android的数据存储操作
Android中,可供选择的存储方式有SharedPreferences、文件存储、SQLite数据库方式、内容提供器、网络。  preferences是参数


如何使用Android提供的工具File  explore,来查看和删除模拟器当中的数据库表。
如果使用LogCat来看程序当中的打印的日志。
SQLiteDatabase  db=mOpenHelper.getWritableDatabase() 这条语句负责得到一个可写的SQLite数据库。如果这个数据库还没有建立,那么mOpenHelper辅助类负责建立这个数据库。
db.execSQL(sql1)  语句对SQL语句进行执行。
Android支持5种打印级别  vwide  Verbose  Warning Info Debug  Error   (谐音:威武我的衣)




ContentValues类和Hashtable比较类似,也是负责存储一些名值对,名是一个String类型,而值都是基本类型。


对单机menu里边按钮的处理逻辑全部放在onMenuItemSelected函数里。


Content Provider
一个程序可以通过实现一个Content Provider的抽象接口将自己的数据暴漏出去。




如果需要访问外部网络,则需要在AndroidManifest.xml文件中加入如下代码申请权限许可;
<uses-permission Android:name="Android.permission.INTERNET"  />


webservice  网络存储




第9章   Android的核心——Intent
   灵魂,程序跳转和传递数据基本上是靠Intent   sbs
   三种形式
   startActivity    
   broadcast Intent
   startService


   启动一个特定的Activity   只需要将当前的Context和这个Activity的class作为参数构造一个Intent
   启动一个未知名的Activity   让系统去寻找和匹配合适的Activity来启动。 
   处理一个Activity的返回值    startActivityForResult方法用于启动一个Activity并且新的Activity执行完成后需要返回到启动它的Activity来执行回调函数毁掉
  ACTION_MAIN   AndroidManifest.xml  标记当前Activity作为一个程序的入口。
 
与动作(Action)相关联的数据(Data)介绍
Android中采用指向数据的一个URI来表示data,例如  content://contacts/1


形成一种级别的语言规范。
Action
categrory   类别,它为执行动作的附加信息
type         数据类型,显示指定Intent的数据类型MIME
component   组件,指定Intent的目标组件的类名称
extras   附加信息,是其它所有附加信息的集合。


两种形式使用Intent
直接Intent   setComponet(ComponentName)
             setClass(Context,Class)
简介Intent   没有指定commonent属性的Intent
Intent还有一个重要的机制就是作为不同进程间传递数据和事件的媒介。


BroadCast Receiver ,并且一般的要给注册的这个Broadcast Receiver设置一个Intent  Filter来制定当前的Broadcast Receiver是对哪些Intent进行监听。在onReceive方法里边最


好不要有执行超过5s的代码,如果这样的话,Android系统就会弹出超时对话框,有比较耗时的方法,可以把这些方法写在一个线程里边,单独来执行。


两种方式对BroadcastReceive进行注册:
 a:AndroidManifest.xml文档当中进行注册。推荐
 b: 代码当中直接注册


第10章  一切为用户服务——Service应用实例
Service  服务,它不能自己运行,需要通过某一个Activity或者其它Context对象来调用。
Context.startService()    和 Context.bindService()  两种方式启动Service,如果在Service的onCreate或者onStart做一些很耗时的动作,最好是启动一个新线程来运行


Service,因为,如果Service是运行在主线程中,会影响到程序的UI操作或者阻塞主线程中的其它事情。
Local  Service  
interprocess communication  IPC 不同进程直接通信机制


Service  的生命周期方法比Activity要少一些,只有onCreate、onStart、onDestroy
  bindService是绑定一起共存亡。
关于BroadcastReceiver,可以这样理解——
Activity是应用的“眼睛”,其展示给用户,可以用来交互;
而BroadcastReceiver是“耳朵”,其接受发生的Intent;
Service则相当于“手”,其把事情做完。


Description Resource Path Location Type
The type R is already defined R.java /ServicesDemo/gen/com/iceskysl/servicesdemo line 10 Java Problem




第11章  开发Android应用的基本步骤
  a  项目有哪些功能;
  b  需要哪些必须的界面以及界面之间跳转的流程
  c  需要的数据及数据来源和格式
  d  是否需要服务端支持
  e  是否需要本地数据库支持
  f  是否需要特殊的权限
  g   是否需要后台进程等
数据来源有多种   SharePreferences、文件系统、数据库、Content  Provider、网络 等方式


第12章  Android综合实例——RSS阅读器实例
RSS 是一个网络站点用来和其它站点之间共享内容的。
RICH Site Summary
RDF  Resource  Description  Framework  新一代的语义网技术
SAX  Simple  API  for XML 通DOM一样也是一个访问XML文档的接口。同DOM一样,SAX并不是一个实际可以使用的XML文档解析器,而是其它兼容SAX的解析器要实现的接口和帮助类的


集合。




DOM(文件对象模型),为XML文档的解析定义了一组接口。解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以使用DOM接口来操作整个树结构。
优点:整个文档树在内存当中,便于操作:支持删除、修改、重新排列等多种功能。
缺点:将整个文档调入内存,浪费时间和空间。


SAX解析XML文档为事件驱动。不用事先调入整个文档,占用资源少,尤其在嵌入式环境,如Android,极力推荐采用SAX进行解析。




第13章  Android综合实例2——基于Google Map开发个人移动地图






Android经典实例笔记
————————————————————————————————————————————————————
findViewById(R.id.go)  根据资源的名称加载View类型的资源;
getString(R.string.msg_dialog) 可以加载字符串资源;
AlertDialog.show()  是一个静态方法。


Activity是一个非常重要的基础类;类同=》J2ME中的Display类;Win32平台的Form类;
如果把Activity看做MVC中的Control,它负责管理UI和接受事件(包括用户输入)


调转功能用Intent来操作   函数 setClass() 设置跳转前后两个Activity类的实例,然后调用Activity自己的startActivity(intent)即可。  finish() 表示当前Activity关掉。
Android 用Activity  Stack来管理多个Activity,同一时刻只会有最顶上的那个Activity是处于active或者running状态




intent 要定位事件的目的地。


种类(category)
类型(type)
组件(componet)
附加数据(extras)






debug----------------------------------------------------------------------------------------------------------------
1  用eclipse打开源码时,出现“Unable to resolve target 'android-2'”提示
 
版本问题:
 
这是Android中打开一个低版本的工程出现的问题,我这边以用android2.2打开android1.5的工程为例。
 
把android1.5工程目录下的default.properties文件中的"target=android-2"改成"target=android-8" 具体改成多少请参照Android SDK and AVD Manager里模拟器的API Level,一


般3以上就能正常运行了。




---------------------------------------------------------------------------------------------------------------------






Android架构分4层  用框行li   (谐音:用框行礼) 
Android布局有5种  架线绝对表 (谐音:架电线绝对需要用表)
数据存储5方式    下贱似C网   (谐音:下贱的就是联通CDMA网  sharePreferences、文件、SQLite、ContentProvider、网络存储)
AICS             动意内务    (谐音 动意内务)
吾师哥           View, surfaceView, GLSurfaceView  (谐音 吾师哥 )
能适应Adapter          ABC,HLRSSSW (ABC,哈儿日思,思数万) 一系列基本的光头,列出的资源简单简单诱饵性包装。
1.请谈一下Android系统的架构。
答:Android系统采用了分层架构,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux核心层。






android  爱pk aapt
布局:架线绝对表;
设想:用框行li;
数据:下贱似C网;
我有:吾师哥 ;
核心:动意内务;
能适应Adapter;
 一系列基本的光头,列出的资源简单简单诱饵性包装;
威武我的衣;
刚开始的时候,邦德保存实力状态 onCreate(Bundle savedInstanceState)






2.谈谈android大众常用的五种布局。
答:在Android中,共有五种布局方式,分别是:FrameLayout(框架布局),LinearLayout (线性布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布局),TableLayout(表格


布局)。
(1)FrameLayout  框架布局,放入其中的所有元素都被放置在最左上的区域,而且无法为这些元素指定一个确切的位置,下一个子元素会重叠覆盖上一个子元素,适合浏览单张图片。
(2)LinearLayout  线性布局,是应用程序中最常用的布局方式,主要提供控件水平或者垂直排列的模型,每个子组件都是以垂直或水平的方式来定位.(默认是垂直)
(3)AbsoluteLayout 绝对定位布局,采用坐标轴的方式定位组件,左上角是(0,0)点,往右x轴递增,往下Y轴递增,组件定位属性为android:layout_x 和 android:layout_y来确定


坐标。
(4)RelativeLayout 相对布局,根据另外一个组件或是顶层父组件来确定下一个组件的位置。和CSS里面的类似。
(5)TableLayout 表格布局,类似Html里的Table.使用TableRow来布局,其中TableRow代表一行,TableRow的每一个视图组件代表一个单元格。
 
3.谈谈android数据存储方式。
答:Android提供了5种方式存储数据:
(1)使用SharedPreferences存储数据;它是Android提供的用来存储一些简单配置信息的一种机制,采用了XML格式将数据存储到设备中。只能在同一个包内使用,不能在不同的包之


间使用。
(2)文件存储数据;文件存储方式是一种较常用的方法,在Android中读取/写入文件的方法,与Java中实现I/O的程序是完全一样的,提供了openFileInput()和openFileOutput()方


法来读取设备上的文件。
(3)SQLite数据库存储数据;SQLite是Android所带的一个标准的数据库,它支持SQL语句,它是一个轻量级的嵌入式数据库。
(4)使用ContentProvider存储数据;主要用于应用程序之间进行数据交换,从而能够让其他的应用保存或读取此Content Provider的各种数据类型。
(5)网络存储数据;通过网络上提供给我们的存储空间来上传(存储)和下载(获取)我们存储在网络空间中的数据信息。
 
4.Android中Activity, Intent, Content Provider, Service各有什么区别。
答:Activity: 活动,是最基本的android应用程序组件。一个活动就是一个单独的屏幕,每一个活动都被实现为一个独立的类,并且从活动基类继承而来。
Intent: 意图,描述应用想干什么。最重要的部分是动作和动作对应的数据。
Content Provider:内容提供器,android应用程序能够将它们的数据保存到文件、SQLite数据库中,甚至是任何有效的设备中。当你想将你的应用数据和其他应用共享时,内容提供


器就可以发挥作用了。
Service:服务,具有一段较长生命周期且没有用户界面的程序。
 
5.View, surfaceView, GLSurfaceView有什么区别。
答:view是最基础的,必须在UI主线程内更新画面,速度较慢。
SurfaceView 是view的子类,类似使用双缓机制,在新的线程中更新画面所以刷新界面速度比view快
GLSurfaceView 是SurfaceView的子类,opengl 专用的
 
6.Adapter有什么作用?常见的Adapter有哪些?
答:Adapter是连接后端数据和前端显示的适配器接口。常见的Adapter有ArrayAdapter, BaseAdapter, CursorAdapter, HeaderViewListAdapter, ListAdapter, 


ResourceCursorAdapter, SimpleAdapter, SimpleCursorAdapter, SpinnerAdapter, WrapperListAdapter等
 
7.Manifest.xml文件中主要包括哪些信息?
答:manifest:根节点,描述了package中所有的内容。
uses-permission:请求你的package正常运作所需赋予的安全许可。
permission: 声明了安全许可来限制哪些程序能你package中的组件和功能。
instrumentation:声明了用来测试此package或其他package指令组件的代码。
application:包含package中application级别组件声明的根节点。
 activity:Activity是用来与用户交互的主要工具。
 receiver:IntentReceiver能使的application获得数据的改变或者发生的操作,即使它当前不在运行。
 service:Service是能在后台运行任意时间的组件。
 provider:ContentProvider是用来管理持久化数据并发布给其他应用程序使用的组件。
 
8.请写一段代码(SAX, DOM, 或者pull )来解析XML文档。

答:下面是要解析的XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person id="1">
<name>张三</name>
<age>22</age>
</person>
<person id="2">
<name>李四</name>
<age>23</age>
</person>
</persons>
复制代码
定义一个名为Person的javaBean用于存放上面解析出来的xml内容
publicclass Person {
private Integer id;
private String name;
private Short age;


public Integer getId() {
return id;
}


public void setId(Integer id) {
this.id = id;
}


public String getName() {
return name;
}


publicvoid setName(String name) {
this.name = name;
}


public Short getAge() {
return age;
}


publicvoid setAge(Short age) {
this.age = age;
}
}
复制代码
(1)使用SAX读取XML文件;它采用的是事件驱动,并不需要解析完整个文档,速度快并且占用内存少。需要为SAX提供实现ContentHandler接口的类。
PersonDefaultHandler.java
import java.util.ArrayList;
import java.util.List;


import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;


import com.sinber.domain.Person;


publicclass PersonDefaultHandler extends DefaultHandler {
private List<Person> persons;
private Person person ; //记录当前person
private String perTag; //记录前一个标签的名称


/**
* 重写父类的开始文档方法。用于初始化
*/
@Override
publicvoid startDocument() throws SAXException {
persons =new ArrayList<Person>();
}


@Override
publicvoid startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if("person".equals(localName)){
Integer id =new Integer(attributes.getValue(0)); //取id
person =new Person();
person.setId(id);
}
perTag = localName;
}


/**参数:
* ch 整个XML字符串
* start 节点值在整个XML字符串中的索引位置
* length 节点值的长度
*/