Android系统应用开发简介.ppt

上传人:夏** 文档编号:568781363 上传时间:2024-07-26 格式:PPT 页数:48 大小:1.73MB
返回 下载 相关 举报
Android系统应用开发简介.ppt_第1页
第1页 / 共48页
Android系统应用开发简介.ppt_第2页
第2页 / 共48页
Android系统应用开发简介.ppt_第3页
第3页 / 共48页
Android系统应用开发简介.ppt_第4页
第4页 / 共48页
Android系统应用开发简介.ppt_第5页
第5页 / 共48页
点击查看更多>>
资源描述

《Android系统应用开发简介.ppt》由会员分享,可在线阅读,更多相关《Android系统应用开发简介.ppt(48页珍藏版)》请在金锄头文库上搜索。

1、AndroidAndroid应用开发应用开发2010年8月13日Android平台架构Android环境配置和开发Android应用程序构成如何开发一个例子目录AndroidAndroid平台架构平台架构JNIJAVAC/汇编简介LinuxLinux核心核心:Android依赖Linux 2.6来提供核心的服务,例如存储管理、进程(Process)管理等Android RuntimeAndroid Runtime:Java语言层级的Virtual MachineLibrariesLibraries:Android里已经提供的C/C+组件。例如,SQLite、OpenGL 3D等。应用应用框架框

2、架(Application Framework,)(Application Framework,):这是结合Applications和Libraries的主架构,让Libraries組件能不断地为Applications所重复使用应用程序应用程序(Applications)(Applications):根据用户的期望而将AF的组件及Libraries组件组合而成的服务。用汉堡比喻用汉堡比喻Android 平台架构平台架构Android环境配置和开发Android平台架构Android应用程序构成如何开发一个例子目录如何安装AndroidSDK和Eclipse插件所需开发环境所需开发环境:JDK

3、 5 或 JDK 6 (仅有JRE不够) Eclipse 3.5 (galileo)下载下载ADT 的的Eclipse 插件插件 http:/ Eclipse 插件插件 (ADT)启动 Eclipse,选择 Help Install New Software,在出现的对话框里,点击Add按钮,在对话框的name一栏输入“ADT”, 然后点击Archive.,浏览和选择已经下载的ADT插件插件压缩文件。 点击 OK.。返回可用软件的视图,你会看到这个插件,然后选择Developer Tools (会选中下面的“Android Developer Tools”和 “Android Editors“

4、),点击 Next,最后重启 Eclipse。下载下载Android SDK:http:/ Eclipse,选择window-preferences,在打开的视图左边点击android,在右边的SDK Location中选择Android SDK所在位置。开发第一个Android应用打开Eclipse,新建项目(点击FileNewProject),在项目列表中展开Android目录,选择Android Project,如下图:开发第一个Android应用开发第一个Android应用点击”finish”即可完成项目的创建,创建后的项目已经是一个可运行的Android应用,我们可以通过下面方式运行

5、此应用:点击工具栏上手机形状的虚拟设备管理器(简称“AVD“),如下:开发第一个Android应用在打开的虚拟设备管理器中创建一个虚拟手机:开发第一个Android应用在项目上右键点击run as Android application,如下图:Android应用程序架构src/ java原代码存放目录原代码存放目录gen/ 自动生成目录自动生成目录gen 目录中存放所有由Android开发工具自动生成的文件。目录中最重要的就是R.java文件。 这个文件由Android开发工具自动产生的。Android开发工具会自动根据你放入res目录的xml界面文件、图标与常量,同步更新修改R.java文

6、件。正因为R.java文件是由开发工具自动生成的,所以我们应避免手工修改R.java。R.java在应用中起到了字典的作用,它包含了界面、图标、常量等各种资源的id,通过R.java,应用可以很方便地找到对应资源。另外编绎器也会检查R.java列表中的资源是否被使用到,没有被使用到的资源不会编绎进软件中,这样可以减少应用在手机占用的空间。res/ 资源资源(Resource)目录目录在这个目录中我们可以存放应用使用到的各种资源,如xml界面文件,图片或数据。具体请看ppt下方备注栏。AndroidManifest.xml 功能清单文件功能清单文件 这个文件列出了应用程序所提供的功能,在这个文件

7、中,你可以指定应用程序使用到的服务(如电话服务、互联网服务、短信服务、GPS服务等等)。另外当你新添加一个Activity的时候,也需要在这个文件中进行相应配置,只有配置好后,才能调用此Activity。default.properties 项目环境信息项目环境信息,一般是不需要修改此文件目录Android环境配置和开发Android平台架构Android应用程序构成如何开发一个例子Android应用程序构成ActivityServiceBroadcast ReceiverContent ProviderIntentActivityAvisualuserinterface通过view管理UI每

8、一个有用户界面的应用至少包含一个activity一个应用可以有多个activity,其中一个作为mainactivity用于启动显示Activity通过startActivity或startActivityForResult启动另外的activityActivity生命周期Activity通过onCreate被创建当一个activity失去焦点,该activity将进入pause状态,系统在内存不足时会将其终止当一个activity被另一个activity覆盖,该activity将进入stop状态,系统在需要内存的时候会将其终止Intent类似于消息、事件通知Intent构成:action、c

9、ategory、dataActivity、Service、broadcastreceiver之间的桥梁IntentactivityserviceBroadcast receiverIntent两类intent:显式:指定具体的目标组件处理startActivity(new Intent(ActivityLifecycle.this, AnotherActivity.class);隐式:由系统接受并决定如何处理startActivity(new Intent(Intent.ACTION_DIAL); 在AndroidManifest.xml中定义activity、service、broadcas

10、treceiver接受的intentIntentIntentfilter:action、category、dataframeworkComponent nameActionDataCategoryintentcomponentactivityserviceBroadcast receiver实例action - DIALdata - tel:01038639592action - VIEWdata - http:/Service没有UI,启动之后一直运行于后台例子:音乐播放器与应用程序的其他模块(例如activity)一同运行于主线程中通过startService或bindService创建S

11、ervice通过stopService或stopSelf终止Service一般的,在activity中启动和终止serviceService生命周期Context.stopService()Serivce.stopSelf()Context.startService()Context.bindService()服务服务-ServiceServiceAndroid中的服务和windows中的服务是类似的东西,服务一般没有用户操作界面,它运行于系统中不容易被用户发觉,可以使用它开发如监控之类的程序。服务的开发比较简单,如下:第一步:继承Service类public class SMSService

12、 extends Service 服务服务-ServiceService第二步:在AndroidManifest.xml文件中的节点里对服务进行配置:服务不能自己运行,需要通过调用Context.startService()或Context.bindService()方法启动服务。这两个方法都可以启动Service,但是它们的使用场合有所不同。使用startService()方法启用服务,调用者与服务之间没有关连,即使调用者退出了,服务仍然运行。使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止。如果打算采用Context.Context.sta

13、rtServicestartService()()方法启动服务方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onStart()方法。如果调用startService()方法前服务已经被创建,多次调用startService()方法并不会导致多次创建服务,。采用startService()方法启动的服务,只能调用Context.stopService()方法结束服务,服务结束时会调用onDestroy()方法。服务服务-ServiceService如果打算采用Context.Context.bindServicebindService()()方法启动服务方法

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

15、ServiceService服务常用生命周期回调方法如下:onCreate() 该方法在服务被创建时调用,该方法只会被调用一次,无论调用多少次startService()或bindService()方法,服务也只被创建一次。onDestroy()该方法在服务被终止时调用。l 与采用Context.startService()方法启动服务有关的生命周期方法onStart() 只有采用Context.startService()方法启动服务时才会回调该方法。该方法在服务开始运行时被调用。多次调用startService()方法尽管不会多次创建服务,但onStart() 方法会被多次调用。l 与采用

16、Context.bindService()方法启动服务有关的生命周期方法onBind()只有采用Context.bindService()方法启动服务时才会回调该方法。该方法在调用者与服务绑定时被调用,当调用者与服务已经绑定,多次调用Context.bindService()方法并不会导致该方法被多次调用。onUnbind()只有采用Context.bindService()方法启动服务时才会回调该方法。该方法在调用者与服务解除绑定时被调用。采用采用startServicestartService()()启动服务启动服务采用Context.startService()方法启动服务的代码如下:p

17、ublic 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.clas

18、s);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 n

19、ame) ; 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.B

20、IND_AUTO_CREATE);/unbindService(conn);/解除绑定); 何为Contentprovider什么是Contentprovider?ContentProvider是Android应用程序的四大组成部分之一是android中的跨应用访问数据机制为何需要contentprovider?Android中每一个app的资源是私有的app通过contentprovider和其他app共享私有数据如何使用contentprovider通过contentresolver访问Context.getContentResolver()appContentResolverConten

21、tProvider AContentProvider BContentResolverContentResolverappapp如何使用contentproviderURI定位资源content:/contacts/peoplecontent:/call_log类似关系数据库的访问方式以二维数据表的格式暴露数据,缺省都包含_id字段delete(Uriurl,String where,StringselectionArgs)insert(Uriurl,ContentValuesvalues)query(Uriuri,Stringprojection,Stringselection, Strin

22、gselectionArgs,StringsortOrder)update(Uriuri,ContentValuesvalues,Stringwhere, StringselectionArgs)定义自己的contentproviderAndroid的存储一般的,应用程序的数据(包括文件)都是私有的四种持久存储方式Preferences类似properties,xml文件FilesDatabaseSQLiteNetworkBroadcastreceiver接收和处理android的广播消息Android的广播机制系统事件例如变换时区、电量低等应用程序发出广播消息:sendBroadCast广播

23、消息:intentandroidappBroadcast receiverSend Send broadcastbroadcast创建BroadcastReceiver实现一个BroadcastReceiverpublicclassMyAndroidReceiverextendsBroadcastReceiveroverrideonReceive(Contextcontext,IntentsIntents)注册BroadcastReceiver在AndroidManifest.xml文件当中进行注册在代码当中直接进行注册 IntentsFilter filter = new IntentsFi

24、lter(NEW_BROADCAST );MyAndroidReceiver MyAndroidReceiver = new MyAndroidReceiver();registerReceiver(MyAndroidReceiver , filter);Broadcastreceiver生命周期Broadcast receiver对象在onReceive返回后被销毁onReceive中不适合处理异步过程。例如弹出对话框与用户交互,可使用消息栏替代。Android权限控制在AndroidManifest.xml中描述一个app的权限例如: 权限举例(参考android. Manifest.pe

25、rmission) Manifest.permission) 权限名称权限名称权限描述权限描述接收短信android.permission.RECEIVE_SMS拨打电话android.permission.CALL_PHONE系统启动完毕通知android.permission.RECEIVE_BOOT_COMPLETED读取联系人信息android.permission.READ_CONTACTS修改联系人信息android.permission.WRITE_CONTACTS目录Android环境配置和开发Android平台架构Android应用程序构成如何开发一个例子从从Internet

26、Internet获取数据获取数据利用HttpURLConnection对象,我们可以从网络中获取网页数据.URL url = new URL(http:/);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setConnectTimeout(6* 1000);/设置连接超时if (conn.getResponseCode() != 200) throw new RuntimeException(请求url失败);InputStream is = conn.getInputStream();/得到网络返

27、回的输入流String result = readData(is, GBK);conn.disconnect();System.out.println(result);/第一个参数为输入流,第二个参数为字符集编码public static String readData(InputStream inSream, String charsetName) throws ExceptionByteArrayOutputStream outStream = new ByteArrayOutputStream();byte buffer = new byte1024;int len = -1;while

28、( (len = inSream.read(buffer) != -1 )outStream.write(buffer, 0, len);byte data = outStream.toByteArray();outStream.close();inSream.close();return new String(data, charsetName);从从InternetInternet获取数据获取数据利用HttpURLConnection对象,我们可以从网络中获取文件数据.URL url = new URL(http:/ conn = (HttpURLConnection) url.openC

29、onnection();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 ExceptionFileOutputStream outStream = new F

30、ileOutputStream(file);byte buffer = new byte1024;int len = -1;while( (len = inSream.read(buffer) != -1 )outStream.write(buffer, 0, len); outStream.close();inSream.close();向向InternetInternet发送请求参数发送请求参数利用HttpURLConnection对象,我们可以向网络发送请求参数.String requestUrl = http:/localhost:8080/itcast/contanctmanage.

31、do;Map requestParams = new HashMap();requestParams.put(age, 12);requestParams.put(name, 中国); StringBuilder params = new StringBuilder();for(Map.Entry entry : requestParams.entrySet()params.append(entry.getKey();params.append(=);params.append(URLEncoder.encode(entry.getValue(), UTF-8);params.append(&

32、);if (params.length() 0) params.deleteCharAt(params.length() - 1);byte data = params.toString().getBytes();URL realUrl = new URL(requestUrl);HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection();向向InternetInternet发送请求参数发送请求参数conn.setDoOutput(true);/发送POST请求必须设置允许输出conn.setUseCaches(f

33、alse);/不使用Cacheconn.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 outSt

34、ream = 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);=向向InternetInternet发送发送xmlxml数据数据利用HttpURLConnection对象,我们可以向网络发送xml数

35、据.StringBuilder xml = new StringBuilder();xml.append();xml.append();xml.append(中国);xml.append();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.setConn

36、ectTimeout(6* 1000);conn.setDoOutput(true);/允许输出conn.setUseCaches(false);/不使用Cacheconn.setRequestMethod(POST); conn.setRequestProperty(Connection, Keep-Alive);/维持长连接conn.setRequestProperty(Charset, UTF-8);conn.setRequestProperty(Content-Length, String.valueOf(xmlbyte.length);conn.setRequestProperty(

37、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 = read

38、AsString(is, UTF-8);outStream.close();HTTP多线程断点下载应用程序多线程下载:HTTP多线程断点下载应用程序如何才能从文件的指定位置处开始下载文件?(比如从50MB开始)这一点我们可以通过HTTP请求信息头来设置,可以使用HTTP请求信息头的“Range”属性。例如:只要在请求头中加入以下代码就可以只请求部分数据:Content-Range:bytes20000-40000/47000,即从第20000字节请求到第40000个字节,(文件长度是47000字节)HTTP多线程断点下载应用程序如何支持断点下载。就是将下载的进度保存到文件中,但在Android中却不能这么做。在Android平台中,我们需要向文件中写出下载的文件数据,我们通过数据库的方式保存下载进度

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号