Android应用开发 2010年8月13日.

Slides:



Advertisements
Similar presentations
面向侧面的程序设计 方林博士 本文下载地址:
Advertisements

Android ADT + Android SDK Eclipse Eclipse 編輯器 JAVA JAVA 開發工具.
Android开发入门 -----第一个Android程序 主讲:李晓蕾
第一章 Android简介与环境搭建 QQ号: QQ群: (Android编程入门) 网络资源:
Android环境搭建 倚动软件工厂实验室 网络课程地址:
Part 2 開發Android應用程式的流程
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
在PHP和MYSQL中实现完美的中文显示
J2EE与中间件技术 ——Lab.
Android App 系統開發教學 Luna 陳雯琳 2014/12/18
建立Android新專案 建國科技大學 資管系 饒瑞佶 2010/10.
厦门大学数据库实验室 报告人:谢荣东 导师:林子雨 2014年8月30日
移动开发的灵便迭代之道 黄凯.
第2章 建立Android應用程式 2-1 Java語言、XML文件與Android 2-2 建立第一個Android應用程式
CH3 Eclipse.
Android框架及应用开发介绍 信息应用开发部 2009年9月.
Android + JUnit 單元測試 建國科技大學資管系 饒瑞佶 2012/8/19V4.
Kvm异步缺页中断 浙江大学计算机体系结构实验室 徐浩.
實驗十三:顯示目前經緯度位置.
Android开发入门 -----Android 开发“Ready go!” 主讲:李晓蕾
Java Applet 介绍.
Android程式開發準備 Android智慧型手機程式設計 建國科技大學 資管系 饒瑞佶 2012/4 V1 2012/8 V2
第一个Android程序 本讲大纲: 1、创建Android应用程序 2、Android项目结构说明 3、运行Android应用程序
第8章 Android内容提供者(ContentProvider)应用
第二讲 搭建Java Web开发环境 主讲人:孙娜
Ch5 Android應用程式的主要組成.
Chapter 7 Android應用元件 Android應用元件可以幫助我們獲得系統資源訊息(ActivityManager)、提供系統服務(Service)、搜尋系統服務(SearchManager)、監聽Intent訊息(Broadcast Receiver)以及資料共享(ContentProvider和ContentResolver)。
Android Intent 建國科技大學 資管系 饒瑞佶 2011/1.
第4章 Android生命周期.
ContentProvider與資料共享
第9章 使用意圖啟動活動與內建應用程式 9-1 意圖的基礎 9-2 使用意圖啟動活動
Android + Service 建國科技大學 資管系 饒瑞佶.
第2讲 移动应用开发基础知识(二) 宋婕
建立Android新專案 Android智慧型手機程式設計 程式設計與應用班 建國科技大學 資管系 饒瑞佶 2012/4 V1
第8章 Service解析.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第十章 IDL访问数据库 10.1 数据库与数据库访问 1、数据库 数据库中数据的组织由低到高分为四级:字段、记录、表、数据库四种。
Android 视频教程简介.
❶云端下载 请根据自己的手机系统(支持IOS系统与Android系统)选择下述下载方式: 手机系统 应用搜索下载 二维码扫描下载 IOS系统
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
Android智慧型手機程式設計實務應用班
Intent.
三:基于Eclipse的集成开发环境搭建与使用
透過YouTuBe API取得資料 建國科技大學 資管系 饒瑞佶 2018/1 V1.
SOA – Experiment 2: Query Classification Web Service
Android Application Component
第四章 团队音乐会序幕: 团队协作平台的快速创建
Location Based Services - LBS
VB与Access数据库的连接.
本节内容 Win32 API中的宽字符 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
JSP实用教程 清华大学出版社 第2章 JSP运行环境和开发环境 教学目标 教学重点 教学过程 2019年5月7日.
iSIGHT 基本培训 使用 Excel的栅栏问题
《手把手教你学STM32-STemWin》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司
Visual Basic程序设计 第13章 访问数据库
Python 环境搭建 基于Anaconda和VSCode.
Google的云计算 分布式锁服务Chubby.
《手把手教你学STM32-STemWin》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
用Intent啟動程式中的其他Activity、運用WebView顯示網頁 靜宜大學資管系 楊子青
第9章 BroadcastReceiver的使用
Android进程间通讯.
讀取網路資料及JSON開放資料 靜宜大學資管系 楊子青
本节内容 进程 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
使用ADO访问数据库 李宝智 BonizLee 课程 10564A
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
Part 8 Broadcast Receiver、Service和App Widget
多个Activity的使用 本讲大纲: 1、使用Bundle在Activity之间交换数据 2、调用另一个Activity并返回结果
JUDDI安装手册.
Presentation transcript:

Android应用开发 2010年8月13日

目录 Android平台架构 Android环境配置和开发 Android应用程序构成 如何开发一个例子

Android平台架构 JNI JAVA C/汇编 Android框架分为四层:kernel、libraries、framework、applications 1. 最低层是linux kernel,主要负责内存管理、进程调度等系统管理以及终端的硬件驱动。Binder driver,google为android设计的一个增强系统的进程间通信能力的模块。 2. Kernel的上一层是libraries,包含了核心库、第三方库和android虚拟机。android并没有直接采用传统的j2se或j2me的java虚拟机,而是自己建立了一个称为dalvik的虚拟机,号称更节省字节码的空间,性能更好。但这也成为了google与sun关于java版权争议点。 以上两层是采用C语言或汇编语言实现的。 3. Framework是android为应用开发者设计的一套软件框架,提供了丰富的api和一些现成的开发元素。Framework是采用java语言实现的。在NDK出来之前,android应用开发者基本上只能用java来开发应用。 Android使用JNI(Java Native Interface )连接了libraries和framework。 4. Application就是在framework的基础上开发的各种应用。 以上是android系统的总体框架。 C/汇编

简介 Linux核心:Android依赖Linux 2.6来提供核心的服务,例如存储管理、进程(Process)管理等 Android Runtime:Java语言层级的Virtual Machine Libraries:Android里已经提供的C/C++组件。例如,SQLite、OpenGL 3D等。 应用框架(Application Framework,):这是结合Applications和Libraries的主架构,让Libraries組件能不断地为Applications所重复使用 应用程序(Applications):根据用户的期望而将AF的组件及Libraries组件组合而成的服务。

用汉堡比喻Android 平台架构

目录 Android平台架构 Android环境配置和开发 Android应用程序构成 如何开发一个例子

如何安装 Android SDK 和Eclipse 插件 所需开发环境: JDK 5 或 JDK 6 (仅有JRE不够) Eclipse 3.5 (galileo) 下载ADT 的Eclipse 插件 http://dl.google.com/android/ADT-0.9.5.zip 安装 Eclipse 插件 (ADT) 启动 Eclipse,选择 Help > Install New Software,在出现的对话框里,点击Add按钮,在对话框的name一栏输入“ADT”, 然后点击Archive...,浏览和选择已经下载的ADT插件压缩文件。 点击 OK.。返回可用软件的视图,你会看到这个插件,然后选择Developer Tools (会选中下面的“Android Developer Tools”和 “Android Editors“),点击 Next,最后重启 Eclipse。 下载Android SDK: http://dl.google.com/android/android-sdk_r04-windows.zip 下载完SDK后,把.zip文件解压到你电脑上合适位置。启动 Eclipse,选择window->preferences,在打开的视图左边点击android,在右边的SDK Location中选择Android SDK所在位置。

开发第一个Android应用 打开Eclipse,新建项目(点击FileNewProject),在项目列表中展开Android目录,选择Android Project,如下图:

开发第一个Android应用

开发第一个Android应用 点击”finish”即可完成项目的创建,创建后的项目已经是一个可运行的Android应用,我们可以通过下面方式运行此应用: 点击工具栏上手机形状的虚拟设备管理器(简称“AVD“),如下:

开发第一个Android应用 在打开的虚拟设备管理器中创建一个虚拟手机:

开发第一个Android应用 在项目上右键点击run as Android application,如下图:

Android应用程序架构 src/ java原代码存放目录 gen/ 自动生成目录 gen 目录中存放所有由Android开发工具自动生成的文件。目录中最重要的就是R.java文件。 这个文件由Android开发工具自动产生的。Android开发工具会自动根据你放入res目录的xml界面文件、图标与常量,同步更新修改R.java文件。正因为R.java文件是由开发工具自动生成的,所以我们应避免手工修改R.java。R.java在应用中起到了字典的作用,它包含了界面、图标、常量等各种资源的id,通过R.java,应用可以很方便地找到对应资源。另外编绎器也会检查R.java列表中的资源是否被使用到,没有被使用到的资源不会编绎进软件中,这样可以减少应用在手机占用的空间。 res/ 资源(Resource)目录 在这个目录中我们可以存放应用使用到的各种资源,如xml界面文件,图片或数据。具体请看ppt下方备注栏。 AndroidManifest.xml 功能清单文件 这个文件列出了应用程序所提供的功能,在这个文件中,你可以指定应用程序使用到的服务(如电话服务、互联网服务、短信服务、GPS服务等等)。另外当你新添加一个Activity的时候,也需要在这个文件中进行相应配置,只有配置好后,才能调用此Activity。 default.properties 项目环境信息,一般是不需要修改此文件 res/drawable 专门存放png、jpg等图标文件。在代码中使用getResources().getDrawable(resourceId)获取该目录下的资源。 res/layout 专门存放xml界面文件,xml界面文件和HTML文件一样,主要用于显示用户操作界面。 res/values 专门存放应用使用到的各种类型数据。不同类型的数据存放在不同的文件中,如下: · strings.xml 定义字符串和数值,在Activity中使用getResources().getString(resourceId) 或getResources().getText(resourceId)取得资源。它的作用和struts中的国际化资源文件一样。 <?xml version="1.0" encoding="UTF-8"?> <resources> <string name=“itcast”>****</string> </resources> · arrays.xml 定义数组。 <?xml version="1.0" encoding="utf-8"?> <string-array name="colors"> <item>red</item> <item>yellow</item> <item>green</item> <item>blue</item> </string-array> · colors.xml 定义颜色和颜色字串数值,你可以在Activity中使用getResources().getDrawable(resourceId) 以及getResources().getColor(resourceId)取得这些资源。例子如下: <color name="contents_text">#ff000000</color> · dimens.xml 定义尺寸数据,在Activity中使用getResources().getDimension(resourceId) 取得这些资源 <dimen name="key_height">50dip</dimen> · styles.xml 定义样式。 <style name="itcastText" parent="@style/Text"> <item name="android:textSize">18px</item> <item name="android:textColor">#008</item> </style> res/anim/ 编译成帧动画的XML文件。 res/xml/ 在Activity中使用getResources().getXML()读取该目录下的XML资源文件。 res/raw/ 该目录下的文件将直接被复制到设备上。编译软件时,这些数据不会被编译,它们被直接加入到程序安装包里。 为了在程序中使用这些资源,你可以调用getResources().openRawResource(ID) , 参数ID形式:R.raw.somefilename。

目录 Android平台架构 Android环境配置和开发 Android应用程序构成 如何开发一个例子

Android应用程序构成 Activity Service Intent Broadcast Receiver 包含了5个部分:activity,service,intent,broadcast receiver,content provider Broadcast Receiver Content Provider

Activity A visual user interface 通过view管理UI 每一个有用户界面的应用至少包含一个activity 一个应用可以有多个activity,其中一个作为main activity用于启动显示 Activity通过startActivity或startActivityForResult启动另外的activity

Activity生命周期 Activity通过onCreate被创建 当一个activity失去焦点,该activity将进入pause状态,系统在内存不足时会将其终止 当一个activity被另一个activity覆盖,该activity将进入stop状态,系统在需要内存的时候会将其终止 当activity处于pause或者stop状态时,都可能被系统终止并回收。因此,有必要在onPause和onStop方法中将应用程序运行过程中的一些状态,例如用户输入等,保存到持久存储中。如果程序中启动了其他后台线程,也需要注意在这些方法中进行一些处理,例如在线程中打开了一个进度条对话框,如果不在pause或stop中cancel掉线程,则当线程运行完cancel掉对话框时就会抛出异常。 Project:ActivityLifecycle

Intent 类似于消息、事件通知 Intent构成:action、category、data Activity、Service、broadcast receiver之间的桥梁 activity service Intent可以理解为应用程序向系统表达的一种意愿:希望系统做什么。 一个Activity可以通过intent来启动另外的activity或service实例,或者通过intent来发起一个广播。 Service可以通过intent来启动一个activity或另一个service实例,也可以通过intent发起一个广播。 Broadcast receiver通过获取intent取得其关注的广播消息。 Intent Broadcast receiver

Intent 两类intent: 显式:指定具体的目标组件处理 startActivity(new Intent(ActivityLifecycle.this, AnotherActivity.class)); 隐式:由系统接受并决定如何处理 startActivity(new Intent(Intent.ACTION_DIAL)); 在AndroidManifest.xml中定义activity、service、broadcast receiver接受的intent 显式的,应用程序向系统发出intent,指明需要哪一个component处理。 隐式的,应用程序向系统发出一个intent,但没有具体指明该intent的接收者,由系统匹配最合适的接收者负责处理。如果存在多个匹配,那么系统会弹出对话框给用户选择处理的应用。 系统如何知道哪些component可以处理哪些intent?在androidmanifest.xml文件中定义intent-filter

Intent Intent filter: action、category、data Component name Action Data activity Filter分三类,action、category、data 在filter中定义相关的匹配规则,告知系统对应的component可以接受哪些intent service framework component Broadcast receiver intent

实例 action -- DIAL data -- tel:01038639592 action -- VIEW ACTION_CALL 拨出Data里指定的电话号码 ACTION_EDIT 打开编辑Data里指定数据相对应的应用程序 ACTION_MAIN 主程序入口,不会接收数据,结束后也不返回数据 ACTION_SYNC 在Android平台和服务器之间同步数据 ACTION_VIEW 根据Data类型的不同,打开相对应的应用程序以显示数据 ACTION_DIAL 启动Dialer或其他拨号程序,并显示Data里指定的电话号码 ACTION_SENDTO 向Data里描述的目标地址发送数据 ACTION_TIME_TICK 系统时间每过一分钟发出的广播 ACTION_TIME_CHANGED 系统时间通过设置发生了变化 ACTION_TIMEZONE_CHANGED 时区改变 ACTION_BOOT_COMPLETED 系统启动完毕 ACTION_PACKAGE_ADDED 新的应用程序apk包安装完毕 ACTION_PACKAGE_CHANGED 现有应用程序apk包改变 ACTION_PACKAGE_REMOVED 现有应用程序apk包被删除 ACTION_UID_REMOVED 用户id被删除

Service 没有UI,启动之后一直运行于后台 例子:音乐播放器 与应用程序的其他模块(例如activity)一同运行于主线程中 通过startService或bindService创建Service 通过stopService或stopSelf终止Service 一般的,在activity中启动和终止service

Service生命周期 Context.startService() Context.bindService() 上一页ppt提到两种创建service的方法,startService或者bindService,他们的区别就在于,startService是创建并启动service,而bindService只是创建了一个service实例并取得了一个与该service关联的binder对象,但没有启动它。 Project: local service controller Context.stopService() Serivce.stopSelf()

服务--Service Android中的服务和windows中的服务是类似的东西,服务一般没有用户操作界面,它运行于系统中不容易被用户发觉,可以使用它开发如监控之类的程序。服务的开发比较简单,如下: 第一步:继承Service类 public class SMSService extends Service { }

服务--Service 第二步:在AndroidManifest.xml文件中的<application>节点里对服务进行配置: <service android:name=".SMSService" /> 服务不能自己运行,需要通过调用Context.startService()或Context.bindService()方法启动服务。这两个方法都可以启动Service,但是它们的使用场合有所不同。使用startService()方法启用服务,调用者与服务之间没有关连,即使调用者退出了,服务仍然运行。使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止。 如果打算采用Context.startService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onStart()方法。如果调用startService()方法前服务已经被创建,多次调用startService()方法并不会导致多次创建服务,。采用startService()方法启动的服务,只能调用Context.stopService()方法结束服务,服务结束时会调用onDestroy()方法。

服务--Service 如果打算采用Context.bindService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onBind()方法。这个时候调用者和服务绑定在一起,调用者退出了,系统就会先调用服务的onUnbind()方法,接着调用onDestroy()方法。如果调用bindService()方法前服务已经被绑定,多次调用bindService()方法并不会导致多次创建服务及绑定(也就是说onCreate()和onBind()方法并不会被多次调用)。如果调用者希望与正在绑定的服务解除绑定,可以调用unbindService()方法,调用该方法也会导致系统调用服务的onUnbind()-->onDestroy()方法。

服务--Service 服务常用生命周期回调方法如下: onCreate() 该方法在服务被创建时调用,该方法只会被调用一次,无论调用多少次startService()或bindService()方法,服务也只被创建一次。 onDestroy()该方法在服务被终止时调用。 与采用Context.startService()方法启动服务有关的生命周期方法 onStart() 只有采用Context.startService()方法启动服务时才会回调该方法。该方法在服务开始运行时被调用。多次调用startService()方法尽管不会多次创建服务,但onStart() 方法会被多次调用。 与采用Context.bindService()方法启动服务有关的生命周期方法 onBind()只有采用Context.bindService()方法启动服务时才会回调该方法。该方法在调用者与服务绑定时被调用,当调用者与服务已经绑定,多次调用Context.bindService()方法并不会导致该方法被多次调用。 onUnbind()只有采用Context.bindService()方法启动服务时才会回调该方法。该方法在调用者与服务解除绑定时被调用。

采用startService()启动服务 采用Context.startService()方法启动服务的代码如下: public class HelloActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { ...... Button button =(Button) this.findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener(){ public void onClick(View v) { Intent intent = new Intent(HelloActivity.this, SMSService.class); startService(intent); }}); }

采用bindService()启动服务 采用Context.startService()方法启动服务的代码如下: public class HelloActivity extends Activity { ServiceConnection conn = new ServiceConnection() { public void onServiceConnected(ComponentName name, IBinder service) { } public void onServiceDisconnected(ComponentName name) { }; @Override public void onCreate(Bundle savedInstanceState) { Button button =(Button) this.findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener(){ public void onClick(View v) { Intent intent = new Intent(HelloActivity.this, SMSService.class); bindService(intent, conn, Context.BIND_AUTO_CREATE); //unbindService(conn);//解除绑定 }});

何为Content provider 什么是Content provider? 为何需要content provider? Content Provider 是Android应用程序的四大组成部分之一 是android中的跨应用访问数据机制 为何需要content provider? Android中每一个app的资源是私有的 app通过content provider和其他app共享私有数据 在android中,系统对资源和数据的管理机制是这样的: 每一个应用的资源是私有的,如果应用本身没有开放这些资源,其他应用是无法访问到这些资源的。Android通过将每一个应用视为一个linux用户来实现这一机制。 那么,如果一个应用希望它所拥有的资源和数据可以被其他应用使用,那么就需要通过content provider来对外提供访问接口。

如何使用content provider 通过content resolver访问 Context.getContentResolver() app app app ContentResolver ContentResolver ContentResolver 如何使用content provider? Android使用了content resolver和uri数据表示方式,提供对content provider的统一访问。 应用在使用content resolver访问需要的数据时,系统content resolver根据传入的uri,定位到该uri对应的content provider,完成相应的操作。 Content provider提供了一种类似于数据库二维表的数据展现和访问方式。 从图中也可以看到,一个content provider被注册之后,它就可以被所有的应用通过content resolver访问了。 ContentProvider A ContentProvider B

如何使用content provider URI定位资源 类似关系数据库的访问方式 以二维数据表的格式暴露数据,缺省都包含_id字段 content://contacts/people content://call_log 类似关系数据库的访问方式 以二维数据表的格式暴露数据,缺省都包含_id字段 delete(Uri url, String where, String[] selectionArgs) insert(Uri url, ContentValues values) query(Uri uri, String[] projection, String selection,  String[] selectionArgs, String sortOrder) update(Uri uri, ContentValues values, String where,  String[] selectionArgs) Content resolver如何定位具体要访问哪个content provider呢? Android使用uri来定位资源,即content resolver依靠uri来找到要访问的content provider。 两个例子:通信录联系人的uri,第二个是通话记录的uri。 Android提供了一种类似数据库访问的方式来使用content resolver,并且以二维表的形式表现访问的数据。

定义自己的content provider

Android的存储 一般的,应用程序的数据(包括文件)都是私有的 四种持久存储方式 Preferences——类似properties,xml文件 Files Database——SQLite Network Preference 提供了一种轻量级的存取机制,主要是可以通过关键字读取和存储某个Preference value,比如载系统启动的时候得到上次系统退出时候保存的值。 File机制你可以直接存储一个文件到你手机文件系统路径比如SD卡中 Network通过网络来存储数据,使用下面两个包的java class. java.net.*    android.net.* 

Broadcast receiver 接收和处理android的广播消息 Android的广播机制 系统事件——例如变换时区、电量低等 应用程序发出广播消息:sendBroadCast 广播消息:intent android Send broadcast Broadcast receiver app

创建Broadcast Receiver 实现一个BroadcastReceiver 注册BroadcastReceiver public class MyAndroidReceiver extends BroadcastReceiver override onReceive(Context context, Intents Intents) 注册BroadcastReceiver 在AndroidManifest.xml文件当中进行注册 在代码当中直接进行注册 <receiver Android:name=“MyAndroidReceiver"> <Intents-filter> <action Android:name=”com.eoeAndroid.action.NEW_BROADCAST”/> </Intents-filter> </receiver> IntentsFilter filter = new IntentsFilter(NEW_BROADCAST ); MyAndroidReceiver MyAndroidReceiver = new MyAndroidReceiver(); registerReceiver(MyAndroidReceiver , filter);

Broadcast receiver生命周期 Broadcast receiver对象在onReceive返回后被销毁 onReceive中不适合处理异步过程。例如弹出对话框与用户交互,可使用消息栏替代。 Android在接收到一个广播intent之后,找到了处理该intent的broadcast receiver,创建一个对象来处理intent。 然后,调用被创建的broadcast receiver对象的onReceive方法进行处理,然后就撤销这个对象。 需要注意的是,对象在onReceive方法返回之后就被撤销,所以在onReceive方法中不宜处理异步的过程。

Android权限控制 权限举例(参考android. Manifest.permission) 在AndroidManifest.xml中描述一个app的权限 例如: <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.app.myapp" > <uses-permission android:name="android.permission.RECEIVE_SMS" /> </manifest> 权限举例(参考android. Manifest.permission) 权限名称 权限描述 接收短信 android.permission.RECEIVE_SMS 拨打电话 android.permission.CALL_PHONE 系统启动完毕通知 android.permission.RECEIVE_BOOT_COMPLETED 读取联系人信息 android.permission.READ_CONTACTS 修改联系人信息 android.permission.WRITE_CONTACTS 有时候我们的应用需要使用一些系统提供的能力,例如拨打电话,接收短信等。这时我们就需要向系统申请使用这些能力的权限了。 android通过在androidmanifest文件中申明一系列的<uses-permission>来向应用程序开放指定的权限。

目录 Android平台架构 Android环境配置和开发 Android应用程序构成 如何开发一个例子

从Internet获取数据 利用HttpURLConnection对象,我们可以从网络中获取网页数据. URL url = new URL("http://www.sina.com"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(6* 1000);//设置连接超时 if (conn.getResponseCode() != 200) throw new RuntimeException("请求url失败"); InputStream is = conn.getInputStream();//得到网络返回的输入流 String result = readData(is, "GBK"); conn.disconnect(); System.out.println(result); //第一个参数为输入流,第二个参数为字符集编码 public static String readData(InputStream inSream, String charsetName) throws Exception{ ByteArrayOutputStream outStream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = -1; while( (len = inSream.read(buffer)) != -1 ){ outStream.write(buffer, 0, len); } byte[] data = outStream.toByteArray(); outStream.close(); inSream.close(); return new String(data, charsetName);

从Internet获取数据 利用HttpURLConnection对象,我们可以从网络中获取文件数据. URL url = new URL("http://sinaapp.com/Img269812337.jpg"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(6* 1000); if (conn.getResponseCode() != 200) throw new RuntimeException("请求url失败"); InputStream is = conn.getInputStream(); readAsFile(is, "Img269812337.jpg"); public static void readAsFile(InputStream inSream, File file) throws Exception{ FileOutputStream outStream = new FileOutputStream(file); byte[] buffer = new byte[1024]; int len = -1; while( (len = inSream.read(buffer)) != -1 ){ outStream.write(buffer, 0, len); } outStream.close(); inSream.close();

向Internet发送请求参数 利用HttpURLConnection对象,我们可以向网络发送请求参数. String requestUrl = "http://localhost:8080/itcast/contanctmanage.do"; Map<String, String> requestParams = new HashMap<String, String>(); requestParams.put("age", "12"); requestParams.put("name", "中国"); StringBuilder params = new StringBuilder(); for(Map.Entry<String, String> entry : requestParams.entrySet()){ params.append(entry.getKey()); params.append("="); params.append(URLEncoder.encode(entry.getValue(), "UTF-8")); params.append("&"); } if (params.length() > 0) params.deleteCharAt(params.length() - 1); byte[] data = params.toString().getBytes(); URL realUrl = new URL(requestUrl); HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection();

向Internet发送请求参数 conn.setDoOutput(true);//发送POST请求必须设置允许输出 conn.setUseCaches(false);//不使用Cache conn.setRequestMethod("POST"); conn.setRequestProperty("Connection", "Keep-Alive");//维持长连接 conn.setRequestProperty("Charset", "UTF-8"); conn.setRequestProperty("Content-Length", String.valueOf(data.length)); conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); DataOutputStream outStream = new DataOutputStream(conn.getOutputStream()); outStream.write(data); outStream.flush(); if( conn.getResponseCode() == 200 ){ String result = readAsString(conn.getInputStream(), "UTF-8"); outStream.close(); System.out.println(result); }

=向Internet发送xml数据 利用HttpURLConnection对象,我们可以向网络发送xml数据. StringBuilder xml = new StringBuilder(); xml.append("<?xml version=\"1.0\" encoding=\"utf-8\" ?>"); xml.append("<M1 V=10000>"); xml.append("<U I=1 D=\"N73\">中国</U>"); xml.append("</M1>"); byte[] xmlbyte = xml.toString().getBytes("UTF-8"); URL url = new URL("http://localhost:8080/itcast/contanctmanage.do?method=readxml"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(6* 1000); conn.setDoOutput(true);//允许输出 conn.setUseCaches(false);//不使用Cache conn.setRequestMethod("POST"); conn.setRequestProperty("Connection", "Keep-Alive");//维持长连接 conn.setRequestProperty("Charset", "UTF-8"); conn.setRequestProperty("Content-Length", String.valueOf(xmlbyte.length)); conn.setRequestProperty("Content-Type", "text/xml; charset=UTF-8"); DataOutputStream outStream = new DataOutputStream(conn.getOutputStream()); outStream.write(xmlbyte);//发送xml数据 outStream.flush(); if (conn.getResponseCode() != 200) throw new RuntimeException("请求url失败"); InputStream is = conn.getInputStream();//获取返回数据 String result = readAsString(is, "UTF-8"); outStream.close();

HTTP多线程断点下载应用程序 多线程下载:       

HTTP多线程断点下载应用程序 如何才能从文件的指定位置处开始下载文件?(比如从50MB开始)这一点我们可以通过HTTP请求信息头来设置,可以使用HTTP请求信息头的“Range”属性。 例如:只要在请求头中加入以下代码就可以只请求部分数据: Content-Range: bytes 20000-40000/47000 , 即从第20000字节请求到第40000个字节,(文件长度是47000字节)

HTTP多线程断点下载应用程序 如何支持断点下载。就是将下载的进度保存到文件中,但在Android中却不能这么做。在Android平台中,我们需要向文件中写出下载的文件数据,我们通过数据库的方式保存下载进度

谢谢!