一、android简介
- 3G介绍
- 2G时代 2.5 GPRS 最大下载速度 30KB
- wap类似2.5G或2.5G以下的网络 逐步被淘汰
- 3G时代 hsdpa 最大下载速度 7.2M
- 3G的基带带宽
- 中国联通 6M 6M/100 600K
- 中国移动 3.1M ophone系统
- 中国电信 固定网络非常多 3G -> wifi
- 4G时代 最大下载速度35Mbps 还在探索中
- 2G时代 2.5 GPRS 最大下载速度 30KB
- net互联网、3Gnet
- android : 是操作系统 + 部分应用层软件的集合.
- android火的原因:免费 开源。国内企业将android源码改进后作为自己自主研发的操作系统。
- android的版本历史
- 1.5版
- 1.6版
- 2.1版
- 2.2版:市面上绝大多企业主要针对2.2/2.3进行开发,2.2稳定,2.3有Bug
- 2.3版:添加了sip通话的支持,在省电上下了功夫,并做成了黑色主题,但2.3模拟器有bug,不太稳定
- 3.0版:主要是针对平板电脑,为平板和手机的整合做准备,有了对设备的判断开关
- 4.0版:统一版,将电视、平板、手机整合,市面上还没有支持4.0版本
- 物联网:将各种设备连接到互联网上,操作更方便
- google给予开发商的约束:cts测试,目的是为了防止过多版本的android系统
二、android体系结构&虚拟机
- android体系分为4层:
- 底层linux系统层
- lib层(封装了c/c++代码库)
- application framework层(纯java编写)
- applcations层
- android虚拟机:Dalvik vm
- 普通虚拟机和android虚拟机的区别
- 普通vm: .java---> .class--->解析执行
- 安卓vm: .java---> .class--->.dex--->解析执行; 它对普通vm进行了优化,把java代码中的变量抽取后变成常量池
- jvm基于栈、dalvik vm基于寄存器
三、android开发环境搭建 ***
- jdk 1.5 以上版本,如果使用eclipse3.7 版本 jdk> 1.6
- ADT (android development tools ): android 开发工具 ,现使用较稳定的adt15.0版本
- 环境搭建步骤:
- 给eclipse添加adt插件:help选项--->Install New Software..--->add--->找到adt文件--->勾选全部Developer Tools--->如果没有联网一定要将最下方的条目contact all update...勾去掉--->下一步....--->重启eclipse
- 下载SDK:
- 使用工具自动更新:可能出现的问题
- SDK装不上, 默认https加密下载被政府干掉或被防火墙隔离,解决方法:SDK Manager的tools选项的option选项,将https-改->http下载
- 缺点:效率慢,耗时
- 手动下载:下载的原理是解析一个xml文件
- 地址:http://dl-ssl.google.com/android/repository/repository-5.xml 包含所有的下载内容
- http://dl-ssl.google.com/android/repository/ android-2.3.1_r02-linux.zip (2.3版是xml文件的一部分),然后将下载后的文件放到SDK中的temp中
- 使用工具自动更新:可能出现的问题
- 安装SDK:window-->Preference-->android-->SDK location..
- 配置模拟器:点小手机配置
- android 2.2 是google api的子集 ,如果要使用 google 地图 /google 纵横 需要配置google api level 8
- VGA 640*480 像素
- HVGA half vga 480*320 使用较多
- qvga 1/4 vga 320*240
- WVGA 800* 480 使用较多
- FWVGA 854 * 480
四、ddms的图形化操作
- ddms:Dalvik debug manager system, Dalvik虚拟器调试系统
- System.out.println打印到的是LogCat,而不是控制台
- 模拟器和虚拟机的区别?
- DDMS的视图
- 左上(Drivers视图)
- 左中(Emulator Control视图)、左下(LogCat视图)
- 右上(File Explorer视图)
五、adb的常用操作:命令行操作
- SDK目录结构 windows
- samples目录:示例目录
- docs目录(最权威的文档目录)
- extras目录:第三方
- platfroms目录:列出SDK所有支持安卓的源文件
-
- android 很多版本映射关系
- 1.5~4.0
- 对应数字
- 1.5 -api 3(ADT)
- 1.6 4
- 2.1 7
- 2.2 8
- 2.3 9
- 2.4 10
- 4.0 14
- 4.0.3 15
- adb.exe:android debug bridge android的调试桥
- 配置环境变量,方便使用
- adb的操作
- 导入/出文件:adb push/pull [源文件] [目标文件]
- adb push haha1.txt /mnt/sdcard/haha1.txt
- 调试桥不稳定时可杀掉服务再重启:adb kill-server | adb start-server
- 应用程序的安装和卸载: adb install [],只能安装和卸载apk文件
- 安装:adb install demo.apk
- 卸载:adb uninstall com.example.android.mnt,卸载指定唯一标识的报名卡
- 导入/出文件:adb push/pull [源文件] [目标文件]
- 莫名其妙的问题:adb版本不兼容、真机应用的adb和eclipse的adb冲突
- adb其他命令
- adb version 查看adb的版本
- adb devices 查看当前所有连接上来的设备信息
- adb shell 来到模拟器或者是真机的控制台 hou
- ls 查看目录信息
- ps 查看当前运行进程信息
- kill pid 杀死某个进程
- ctrl+F11 横竖屏切换
六、android_helloworld
- android的目录文件
- project.properties:指定开发使用的android.jar版本
- default.properties:adt和sdk版本过低时的文件,功能和project.properties类似
- proguard.cfg:程序发布时的混淆,防止别人反编译
- AndroidManifest.xml 非常重要,系统的清单文件,相当于windows操作系统的注册表
- <manifest/>
- <uses-sdk android:minSdkVersion="9"/> 意思是android2.3 以下的版本不可以安装这个应用程序
- <activity android:icon="@drawable/app" />代表应用程序的界面
- android:name="@string/name":应用程序的名称
- android:icon="@drawable/app":应用程序的图标
- 应用程序的资源文件:res文件
- values目录
- layout目录:编写应用程序对应的布局
- gen包下的R.java类:有三个内部类,类变量存放的都是资源的引用,对资源文件的修改都会造成R类的改变,变的只是增加或删除了引用
- 内部类1 drawable:
- 内部类2 layout:
- 内部类3 string:
- DemoActivity:重要的文件
七、使用apidemo&导入代码
- apidemo示例代码:把android所有sdk提供的api使用方法都以示例展示出来
- 导入apidemo:create project from existing source
- apidemo可能会存在,先将原有apis删除:adb uninstall com.example.android.apis
- ctrl+H 搜索整个工程目录 选择file 搜索
八、案例--电话拨号
- layout的main.xml 配布局
- android:lines="1":指示只能输入一行
- android:id="@+id/aa_number",添加该元素的id,便于取值/响应操作
- android:numeric="integer", 配置此EditText的文本只能是数字
- android:hint="@string/hint" ,文本框的提示信息
- values的string.xml :配全局变量的值
- R.java :对以上两位的操作自动生成引用
- MainActivity.java:调用页面布局,并设置页面元素(button)的事件并响应事件
- 响应事件步骤
- this.findViewById(R.id. aa_number );指示在当前R.layout.main中查找id为 aa_number的引用,在根据引用返回对应的主键(例 Button对象)
- Button的button.setOnClickListener( OnClickListener 接口);方法
- View对象:被点击的时候调用的回调方法
- Log对象:Log.i();/Log.e() ;/Log.d() ;/Log.v() ;/Log.w()
- Intent对象:意图,代表一个要执行的动作意图 Intent intent = new Intent();
- intent.setAction(Intent.ACTION_CALL);
- intent.setData(Uri.parse("tel:"+number));
- 设置权限<uses permission android:name="android.permission.CALL_PHONE"/> 权限就是用来保护用户隐私的
- startActivity (...)方法激活该意图:startActivity(intent);
- 响应点击事件的四种写法
- 自定义myOnClickListener类实现 OnClickListener接口,重写onClick(View v)方法
- 匿名内部类,重写 onClick(View v)方法
- 在布局layout.xml中定义 按钮 的 android:οnclick="deal";
- 在 MainActivity类中实现 deal(View v)方法
- 要文本响应还需在layout中配置 android:clickable="true"
- 直接让该类 MainActivity实现 OnClickListener接口(常用它);
- button.setOnClickListener( this);
- public void onClick(View v){
- switch(v.getId)){
- case R.id.aa_button:
- ...
- }
- }
九、断点调试&代码部署到真实手机
- 安装手机驱动
- 其他步骤和模拟器部署一致
- 断点调试
十、apk文件打包的过程
十一、案例--短信发送器
十二、常用的一些布局简介
LinearLayout 线性布局AbsoluteLayout 据对布局qq斗地主 854*480 apk 800*480 apkRelativeLayout 相对布局FrameLayout 帧布局 类似div层tablelayout 表格布局
十三、android界面大小显示的单位
推荐使用dip,文字使用sp。
实现拨号和短信发送原理:凡是涉及收费和隐私的都需要在注册表中设置权限
拨号:在创建好android工程后。
- 界面:layout设置界面(并设置文本编辑和按钮控件的id)、设置好要显示的文字变量及各种属性
- java代码实现功能:两种方式
- 第一种:让MainActivity类实现OnClickListener接口,重写OnClick(View view)方法,在该方法中获取文本(按id获取)的值,并处理按钮的单击事件
- public class MainActivity2 extends Activity implements OnClickListener {
- private EditText numET;
- public void onCreate(Bundle savedInstanceState) {// Activity创建时执行
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- numET = (EditText)findViewById(R.id.numET);// 获取文本框, 由于其他方法中也用, 用成员变量引用
- Button callBT = (Button) findViewById(R.id.callBT);// 获取到按钮对象
- callBT.setOnClickListener(this); // 给按钮添加监听器
- }
- public void onClick(View v) {// 定义事件处理方法
- String num = numET.getText().toString();// 获取文本框中的文本
- Intent intent = new Intent();// 创建意图对象
- intent.setAction(Intent.ACTION_CALL);// 设置意图的动作(拨打电话)
- intent.setData(Uri.parse("tel://" + num));// 设置意图的数据(电话号码)
- startActivity(intent);// 通过意图启动Activity(拨打电话的界面)
- }
- }
- 第二种:在main.xml中添加按钮的οnclick="send"属性,并在 MainActivity类中定义一个send(View view)方法,处理按钮的事件
- public class MainActivity3 extends Activity {
- private EditText numET;
- public void onCreate(Bundle savedInstanceState) {// Activity创建时执行
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- numET = (EditText)findViewById(R.id.numET);// 获取文本框, 由于其他方法中也用, 用成员变量引用
- }
- public void call(View view) {
- String num = numET.getText().toString(); // 获取文本框中的文本
- Intent intent = new Intent();// 创建意图对象
- intent.setAction(Intent.ACTION_CALL);// 设置意图的动作(拨打电话)
- intent.setData(Uri.parse("tel:" + num));// 设置意图的数据(电话号码)
- startActivity(intent);// 通过意图启动Activity(拨打电话的界面)
- }
- }
- 第一种:让MainActivity类实现OnClickListener接口,重写OnClick(View view)方法,在该方法中获取文本(按id获取)的值,并处理按钮的单击事件
- 在注册表中设置权限<uses-permission android:name="android.permission.CALL_PHONE"/>
public class MainActivity extends Activity {
private EditText numET;
private EditText contentET;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
numET = (EditText) findViewById(R.id.numET);
// 获取2个文本框
contentET = (EditText) findViewById(R.id.contentET);
}
public void send(View view) {
String num = numET.getText().toString().trim();
// 获取电话号码和短信内容
String content = contentET.getText().toString();
try {
SmsManager manager = SmsManager.getDefault();
// 获取短信管理器
ArrayList<String> list = manager.divideMessage(content);
// 使用短信管理器把短信分段
if (list.size() == 0) {
Toast.makeText(getApplicationContext(), R.string.content_empty, Toast.LENGTH_SHORT).show();
// 弹出通知
return;
}
for (String sms : list) {
// 逐段发送
manager.sendTextMessage(num, null, sms, null, null);
// 使用短信管理器发送指定内容到指定号码上
}
contentET.setText("");
// 清空文本框
Toast.makeText(getApplicationContext(), R.string.success, Toast.LENGTH_SHORT).show();
// 弹出通知
} catch (Exception e) {
e.printStackTrace();
if (num.length() == 0)
Toast.makeText(getApplicationContext(), R.string.insert_num, Toast.LENGTH_SHORT).show();
// 弹出通知
}
}
}