Android详细学习笔记第一季_第1页
Android详细学习笔记第一季_第2页
Android详细学习笔记第一季_第3页
Android详细学习笔记第一季_第4页
Android详细学习笔记第一季_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一、Android学习第一一一环境搭建Android开发环境的搭建环境搭建需要①AndroidSDK②JDK③eclipse环境搭建开始:㈠将AndroidSDK与JDK解压,最好路径中不要出现汉字,然后配置环境变量,方便命令行操作㈡为eclipse(3.4.1)安装开发Android插件AndroidADTHelp-->InstallNewSoftware输入:/android/eclipse便会自动检测出所需要安装的东西,点击install即可。㈢重启eclipse,进行AndroidSDK的配置。Windows-->Preferences-->Android找到你解压的AndroidSDK的路径即可。㈣新建一个AndroidProject来验证平台是否搭建成功。注:我上面步骤走下来之后发现我在运行程序时,没有AndroidVirtualDevices(AVD)的选项。这时可以在Windows-->AndroidSDKManager中找到你所需要安装版本,进行安装。搭建过程还是比较顺利,加油二Android学习第二天识Activity昨天程序搭建成功以后,就可以开发跟运行Android应用程序了,因为Activity是开发中不可或缺的组成部分,所以要对Activity有所认识。以下两点是需要注意的:(个人总结)凡是覆写得方法,在方法体中的第一行一定是super.XXX(),一定要先调用父类里的相应方法做必要的事情,再根据自己的需求去写其他的代码。如果是从头学习安卓开发,不一定要开发最新的版本,可以在较低版本(2.3.3)下进行开发,然后在高版本(4.0)下进行编译与运行,这样可以提高代码的适应能力,可以兼容高级版本。下面对我今天的学习进行个小结:首先Android的四个重要部分①Activity一形象点就是一个应用程序的门面,我们在手机上看到的图形界面Intent—它就像一个搬用工,用于Activity之间传递数据,就像请求Service——这个是不可见的,是为整个应用程序提供服务支持的底层ContentProvider为应用程序提供数据的接口上面的描述我自己感觉也比较抽象,今天专门研究了Activity,终于守得云开见月明:首先进行以下学习之前需要对Android的工程项目目录有一个总体的了解:-HelloAn.c±t-oid—-LEl"C-Hi5ex:=ufiple.Kel1o:=lhdj-oid+EHh=11ctAiiiiroi■!.jav:±+"•AtliIl-oid1.5白-色genEGefler=itedJ~avaFilas]wiba■zovn.ex:=uriple.Kel1o:=ltidj-o£■!由…llR-Jmvs.;■—-L^bassets-…参resB击:-mvr:elLIe::==.■料弓lcctl.pn.g—=.1a>-onj_+!K_|m=iifl.xml—-L^3?v:=□_ue三:,..•国sirigs.xml:■-£71Atl«3±~oii^il:eltlIfest,xml[5]de£pei~ties自己总结:src下是我们自己写得程序;gen下是我们创建程序时系统自动生成的,切忌勿修改assets是一个资源库,与res的区别是不会自动在R.java中自动生成idres是一个资源库,与assets不同的是,每增加一个资源(图片等),会自动在R.java中生成对应的idlayout用于存放布局文件,用来控制Activity的显示格局string.xml中存放的一个一个键值对,Activity可以对其进行提取AndroidManifest.xml是系统比较重要的一个文件,存放Activity的注册信息,每生成一个Activity就应该在这里注册一个。以上是大概的叙述,不知道表述的清不清楚Activity学习笔记~~~Activity初步介绍(自己总结)Activity是一个可见的,用于用户跟应用程序交互,可放置多个控件的一个容器。自己感觉这个Activity的概念就像是我们开发网站的一个页面,也是一个容器,只不过载体不同,一个电脑上面看,一个手机上看而已。Activity注意事项,自己总结一个Activity是一个java类,并且一定要继承Activity类。当一个Activity第一运行时,就会运行onCreate()方法,所以要覆写这个方法。每一个Activity都需要在AndroidManifest.xml中进行配置。为Activity添加必要控件(部分控件)的方法:在布局文件main.xml中进行添加,此时R.java会自动为该控件生成一个唯一的id,这时在Activity中就可以通过findViewByld(R.id.XXX)进行调用啦〜〜〜然后你就可以做任何你想做的事情〜〜〜对有面向对象语言基础的人来说,一看就明白,代码就不用贴啦Activity与Intent形象点来说,Intent就是Activity之间的桥梁,当然也可以是其他的桥梁。今天我只学到了两个Activity之间通过Intent对象来传递数据。Intent是一个对象,并且包含一组信息①Componentname指定要传递到哪个ActivityAction指定另一个Activity要做什么Data——■传送的数据CategortyExtras——键值对,也是用来存储数据进行传递Flags这里需要注意的是,这互相传递的Activity不一定非要在同一个项目工程内。•四种基本控件的使用TextView②EditText③Button④Menu具体的添加方法很简单,这里就不做演示啦,明儿上图上程序〜〜〜这里需要注意的是Menu的添加方法与其他三个有所不同:其他三个控件都是在对应的布局文件中进行添加,而添加Menu需要在Activity中覆写一个方法onCreateOptionMenu(Menumenu),这样一个菜单就被创建,但是要实现功能,则需要覆写另一个方法onOptionItemSelected(MenuItemitem)为这个菜单中每个item进行功能的编写。•Activity的生命周期Activity有七个有关生命周期的函数,分别是:①onCreateonStart。nRestartonResumeonPauseonStoponDestory这里我只做个总结,具体在什么时候调用什么网上的教程都比我说的清楚这里我觉得有两点需要注意:

一、当一个程序启动了后三个进程(onPause,onStop,onDestory),就有可能在系统资源不足时被kill掉。因为手机毕竟不是电脑,内存有限,所以安卓系统会有自己内部的算法来节省自己的资源。二、onDestory在两种情况下可能被调用,1是在代码中调用了finish()方法,2是当系统资源不足的时候。与Activity生命周期有必要联系的还有一个TaskTask说白了就是一个存放Activity的堆栈,所以具有堆栈的特点——后进先出。咱们在手机中看到的永远是处于堆栈最顶层的Activity,需要注意的是,Task中的堆栈没有排序的功能。窗口形态的Activity—这个将是我们在以后开发中使用比较广泛的一种Activity,就类似于弹出框,但是并不会完全遮挡住下层的Activityo使用窗口形态的Activity非常简单,只需要在AndroidManifest.xml的对应Activity注册代码中加一个属性:android:theme="@Android:style/Theme.Dialog"/>即可喽〜〜〜明天将要开始的是Activity布局的学习。其实安卓对于有java基础的人还是比较容易上手的,加油三Android学习第三天三Android学习第三天Activity的布局步介绍今天总结下Activity相关布局的一些知识:Activity:简单跟常用的布局分为两种:Activity:简单跟常用的布局分为两种:①LinearLayout--线性布局②TableLayout--表格布局③RelativeLayout--相对布局(今后将会频繁的使用到这个布局)下面来简单总结下前两种(线性/表格)布局当中常用到的一些属性:android:id为指定的控件制定相应的idandroid:text指定控件中显示的文本内容,这里尽量使用@strings.**android:gravity指定控件中内容的显示位置,如居中等属性android:textsize指定控件中字体的大小,单位pt(磅)等android:background指定控件的背景色,注意这里使用的是RGB命名法,如“#aa0000”android:layout_width指定控件的宽度android:layout_height指定控件的高度android:padding指定控件的内边距,注意这里也可以分上下左右分别设置android:sigleLinetrue/false,设置为true,则将控件中的内容在同一行当中进行显示android:weight指定每个控件所占的屏幕比例,如果一个屏幕有两个控件,其中一个控件的该值设置为5,另一个设置为2,则第一个控件将占据整个屏幕的5/7,另一个控件则是2/7当然,我们可以使用布局嵌套的方式来实现更加复杂,更加漂亮的布局样式,比方说LinearLayout中可以再次嵌套任意多的其他布局,TableLayout也是一样,这里就不举例子了,网上一搜一堆的其实熟悉网页编写,jsp、css之类的对嵌套不会陌生,跟网页编程有异曲同工之妙下面来简单总结下前两种(相对)布局当中常用到的一些属性:相对布局会依赖于其他控件的位置,相对前两种布局操作会比较复杂。我们把相对布局中常用的控件分成了几个组,便于记忆第一组:两个控件上下左右的对齐属性:(通过ID来指定对方控件)android:layout_below将该控件置于指定控件之下android:layout_above将该控件置于指定控件之上android:layout_toLeftO—将该控件的右边缘和指定控件的左边缘对齐android:layout_toRightOf将该控件的左边缘和指定控件的右边缘对齐第二组:两个控件上下左右的对齐属性:(通过ID来指定对方控件)android:layout_alignBottom将该控件的下边缘与指定id的下边缘对齐android:layout_alignLeft将该控件的左边缘与指定id的左边缘对齐android:layout_alignRight将该控件的右边缘与指定id的右边缘对齐android:layout_alignTop将该控件的上边缘与指定id的上边缘对齐第三组:与父控件对齐的属性:(true/false两个属性值)android:layout_alignParentLeft将该控件的左边缘与其父控件的左边缘对齐android:layout_alignParentRight将该控件的右边缘与其父控件的右边缘对齐android:layout_alignParentBottom将该控件的下边缘与其父控件的下边缘对齐android:layout_alignParentTo将该控件的上边缘与其父控件的上边缘对齐第四组:居中属性android:layout_centerInParent指定控件水平垂直都居中(14)android:layout_centerHorizontal指定控件水平居中(15)android:layout_centerVertical指定控件垂直居中这里大家应该会很疑惑,第一组跟第二组对齐看似相同,下面举两个例子:android:layout_toLeftOf控件一的左边缘与控件二的右边缘对齐android:layout_alignLeft控件二控件-控件一的左边缘与控件二的左边缘对齐看出来了吧,这两组属性有本质的区别。在以后的使用中,大家根据需要选择即可这些都是口头上之说,如果大家要更深刻的了解这些属性的作用,就自己动手试一试,这里就不举例子了,只为大家做个总结,一遍以后查阅〜〜〜明儿见喽〜、Android学习第四一一JAVA基础回顾这才学习Android的第四天,在程序中已经遇到了JAVA中以前不常用的一些知识点,赶紧回顾复习一下,打下基础这里就做个简单的小结:一、匿名内部类•匿名内部类说白了就是个没有被命名的JAVA类在以下条件下使用匿名内部类比较适合:只用到该类的一个实例时类在定义后被马上用到类非常小(SUN推荐是在4行代码以下)给类命名并不会导致你的代码更容易被理解在使用匿名内部类时,需要注意:匿名内部类不能有构造方法匿名内部类不能定义任何静态成员、方法和类匿名内部类不能是public、protected>private>static只能创建匿名内部类的一个实例一个匿名内部类一定是在new之后,用其隐含实现一个接口或实现一个类匿名内部类为局部内部类,所以局部内部类的限制对其都生效具体的例子大家可以从网上看下,我这里只是大概的总结一下需要注意的东西。二、线程•线程说白了就是一个程序中不同的执行路径。线程跟进程的比较:

①每个进程都有独立的代码跟数据空间(进程的上下文),进程间得切换会有较大的开销线程可以看做是轻量级的进程,同一个线程共享代码跟数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换的开销小多进程:在操作系统中能同时运行多个任务(程序)多线程:在同一应用程序中有多个顺序流同时执行new一个新线程类出来一般会使用下面两种方法的其中一个:一:继承Thread类来创建一个新的线程,并重写run方法二:实现Runnable方法这里需要注意的是:线程启动:Thread.start()方法调用:run()这两种方式的区别:其实真正要启动一个新的线程,需要执行start()方法;run()方法并没有启动一个新的线程,只是在当前线程下,暂停去执行run方法中的方法体,然后再继续执行接下来的程序。这两种方式的区别在今后也会详加介绍五.Android学习第四天补充Android的常用控件五.Android学习第四天补充Android的常用控件一、RadioGroup和RadioButton单选按钮二、Checkbox复选框

三、Toast提示框,会自动消失四、ProgressBar进度条工具五、ListView以列表形式将控件显示出来下面就对这些内容做个详细的解释:首先我们要注意在布局文件中对控件进行声明不是必须的,这个在以后应用中需要动态生成一些控件的时候,我们就可以在Activity中进行控件声明,这些以后项目中遇到我们再介绍。我们先来看RadioGroup与RadioButton的使用方法先来看看RadioGroup与RadioButton在main.xml中的声明,如下图中代码:1E-sdiivitynun.■"strings.innL<?Kmlversion=^l.0nencoding=r,?>-<LirjarLayout<?Kmlversion=^l.0nencoding=r,?>-<LirjarLayoutxmlns:android=nhttp://s-chandroid:layout_width=rrflJI_pdrentlrandroid:1ayout_height=l__p^jrent™android:orisntation=vertr>android:id=d/r^diosroupMandroid:1ayoutwidth="svrdp_content?randroid:1ayout_he1ght=Frwr^paontcnt#android:orientalion=prvertisaJ”・^ndr'/<spJr/res/anc/roid^j

11

12

13

14

IS

lb

17101320■<RadioPut7t.onandroid:android:1ayout_width=content"android:Layout,height.-ent什android:test=rr(?s1&rl<RadioButtonandroid:id=*t?+id/ferns1&r,an^iroici:1ayout_width=content"android:Layout._hsigl'Lt=,T^raL-_content[android:tent=,T&strinc*/></RadioGroup>如下图中代码是为RadioGroup添加监听器:〃下来垩打区些撞件蜥是盆听亮f&起一个匿窘⑶畛,为能U网定盅听器r-adioGcoup.setOnCheckedChangeListe-ner(ii^urOnCh.'pcke<iChangeLi3tensf(>((5Qverridepiibl±<-v-r>Id(R^di*Gi?oupgr*upfink己扣厘己吕:{//I-uLn■Auto-^genaratedmet-hodstubj_f(in^le.^ecrd()==chacJc&cild)[System,cut.print1n(wmale-checked..-、..;U^DSet^ttJHE//Toast\elstIf(£amala.Id()==-cJiftckedld)tSystemroutrprintln('"femal-acheeked,r);"1我们再来看Checkbox的使用方法先来看看Checkbox在main.xml中的声明,如下图中代码:<CheckBoxandroid:1(1=,rcT/swlin*arjdr^id:lay*ut_width=Twr3p_c^nte^trrandr&id:layoutheight=■content"android:tw(?strin-g/swln)"<CheckBoxandraid:id=”『彳_±<f/^ur511android:layout_width=TpzrspcontentFl|ancdroxd;layouthaxglilL-,rivi-apGOntaftt,Fandroid:teKt=Wstrin-gfrun*<CheckE-on□id:i4=门由占H"androld:layout_wi_dth=^p/rapconieut,rendfj1ayout_hsight=■S—p口。#七mjr亡”android:teHr■三%srringfread”如下图中代码是为Checkbox添加监听器:〃机gEG收莒与曲5添加i!5煲剽swim.s-etOnCheeke-dtChangeLi5t-eneuC-ompoLindBntt-on.OnCheck-e'dCh&ngeListener(){00vtrridfepublicvoidonCfiecfceiiChangedtCompouiidHiittoniiuttonVieu?^bg1-eahist{1£h^-ck^d){Syst-eaa.our,println(rswim"he^kei;}else{Systsn.^wc.prin^ln(r,Ewimunchecked『ProgressBar的使用如下代码为水平进度条的声明方法:<ProgressBarandroid:id="(?+土d/firstrrstyle=rr?andj7Ciid:attr/progressrStyleiforizontdIrrandroid:Layout_-width=111OOdlprrandroid:Layout_hsight=rrivrap_contentrr|android:visibility=Jrgone/>下图为默认进度条的声明方法:<ProgrsssEatfandroid:id=rrt?-Mc//secoric/rrstyle=rrd:<attr/progrossB3T^tyl白rrandroid:1ayout._width=rrivr^p_contentrrandroid:l^yout._hsight=rrDZjrapcontentrrandroid:visibility=rtqone"/>可以一眼看出,style属性的设置决定了进度条的样式。如下代码即为实现这两个进度条的Activity类ProgressBarTgress;importandroid.app.Activity;importandroid.os.Bundle;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;importandroid.widget.ProgressBar;publicclassProgressBarTestextendsActivity(//声明变量privateProgressBarfirst=null;privateProgressBarsecond=null;privateButtonbutton=null;privateinti=0;@OverridepublicvoidonCreate(BundlesavedInstanceState)(//这两句一般都要有super.onCreate(savedInstanceState);setContentView(R.layout.main);//通过findViewById获得控件对象first=(ProgressBar)findViewById(R.id.first);second=(ProgressBar)findViewById(R.id.second);button=(Button)findViewById(R.id.button);//为button设置监听器button.setOnClickListener(newButtonListener());}//监听器内部类@OverridepublicvoidonClick(Viewv)(//TODOAuto-generatedmethodstubif(i==0)(//设置进度条为可见,如果写0的话,不好看,View.VISIBLE就能让人一看就知道是设置为可见first.setVisibility(View.VISIBLE);second.setVisibility(View.VISIBLE);}elseif(i<first.getMax())(//设置进度条的最大值first.setMax(200);//设置进度条的位置first.setProgress(i);//设置第二进度条的位置first.setSecondaryProgress(i+10);//因为默认的进度条是无法显示进行的状态的,所以second不用设置}else(first.setVisibility(View.GONE);second.setVisibility(View.GONE);}i=i+10;}}}如下图为运行后的结果:璃向进度奈与默认进度奈ProgressBarTest但是在开发应用程序的时候,比如下载这些功能是不能写在Activity中的,有可能导致整个Activity长时间无响应或者报错,用户体验较差,所以Handler就应运而生啦〜以后将会学习到在使用ListView的例子中,需要注意这里继承的是Activity的子类ListActivity。六、Android学习第五天Handler的使用注意:有很多功能是不能写在Activity中的,例如说下载或者处理大量的数据等,如果这类操作写在Activity中,就有可能导致整个Activity无响应甚至报错,这样用户体验就会比较差。所以此类功能应该独立于Activity,且互不干扰,所以Handler就应运而生了。Handler提供了一个异步的消息处理的方案,将具体复杂的操作都放在一个线程中取处理。创建一个Handler对象的基本步骤如下:(一)点击一个按钮,调用Handler的post方法,将要执行的线程对象添加到队列当中去。将要执行的操作写在线程对象的run()方法当中。(三)如果想要循环执行,则可以在run方法内部执行Handler的postDelayed或者post方法,将线程反复加入到队列当中。下面是使用Handler的一个简单的例子:packagemickey.handler;importandroid.app.Activity;importandroid.os.Bundle;importandroid.os.Handler;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;publicclassHandlerTestextendsActivity(//声明两个按钮控件privateButtonbegin=null;privateButtonend=null;@OverridepublicvoidonCreate(BundlesavedInstanceState)(super.onCreate(savedInstanceState);setContentView(R.layout.main);//根据控件的ID得到代表控件的对象,并为这两个按钮设置相应的监听器begin=(Button)findViewById(R.id.begin);begin.setOnClickListener(newStartButtonListener());end=(Button)findViewById(R.id.end);end.setOnClickListener(newEndButtonListener());//为start按钮设置的监听器classStartButtonListenerimplementsOnClickListener(@OverridepublicvoidonClick(Viewv)(//无延迟,直接加入消息队列中,此时消息队列中只有此一个线程//调用handler的post方法,将要执行的线程对象添加到队列当中去handler.post(updateThread);}}//为end按钮设置的监听器classEndButtonListenerimplementsOnClickListener(@OverridepublicvoidonClick(Viewv)(handler.removeCallbacks(updateThread);}}//创建一个Handler对象Handlerhandler=newHandler();//一个线程类,将要执行的操作写在线程对象的run方法当中RunnableupdateThread=newRunnable()(@Overridepublicvoidrun()(System.out.println("run");//在run方法内发执行postDelayed或者post方法,延迟三秒,将线程加入队列handler.postDelayed(updateThread,3000);}};}但是我们看到了,上面的例子中我们只是调用了线程的run()方法,并没用调用Thread的start()方法来重启一个线程,因此,上面这个例子中,实际上我们并没有重启一个新的线程,从始至终Handler都是和Activity在同一线程中的。所以如果我们在使用Handler时,要重启一个线程,使用Handler.post(Threadthread)只是调用了该线程的run方法,我们只有使用java中重启线程的方法来重启一个新的线程,即调用Thread.start()方法,这儿不再多说七,Android学习第六天一SQLite与文件下载SQLiteSQLite是Android内嵌的一个非常小的关系型数据库。总结:当我们操作在学习SQLite当中,遇到两个问题:如果我们在搭建Android环境成功后,在命令行中输入adb后没有反应,可以按一下操作来做:第一步:将platform-tools的目录加入path环境变量的配置中;第二步:将platform-tools下的adb.exe以及两个dll文件拷贝到tools目录下第三步:重启命令行,输入adb,搞定(二)结果按照如上配置path变量后,输入adbshell命令后,提示Devicenotfound.报这个错的原因,原来是因为没有连接到手机所以报错,在开发Android中,是因为Android虚拟机没有运行而报错,我们只要在eclipse中将Android虚拟机运行起来即可访问。根据mars老师说,SQLite在开发过程中会出现一些比较古怪的问题,所以建议不要再SQLite中存储过多的数据,不要太过于依赖SQLite。.程序调试(一)可以适量的加入一些System.out语句,用来检测程序的运行情况(二)使用日志输入(Log)——推荐使用这种规范的做法.文件下载要实现下载文件的功能,一般步骤为:(一)创建一个HttpURLConnection对象URLurl=newURL("http://......");HttpURLConnectionurlConn=(HttpURLConnection)url.openConnection();(二)获得InputStream对象urlConn.getInputStream();(三)访问网络的权限android:permission.INTERNET访问手机SDCARD的步骤:(一)得到当前设备SD卡的目录Environment.getExternalStorageDirectory();(二)访问SD卡的权限android.permission.WRITE_EXTERNAL_STORAGE遇到的问题:当写好下载程序,却怎么也下载不成功,原来是忘记了最最重要的一步:切忌最后要在Manifest.xml中添加以下两行代码,赋予权限:<!--下面这两句在下载中必不可少,第一个是赋予了下载的权限,第二个是赋予了写入SD卡的权限--><uses-permissionandroid:name="android.permission.INTERNET"/><uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>八,Android学习第七一一XML文件解析方法XML文件:extensiblemarkuplanguage定义:用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。解析XML的方式:SAX——SimpleAPIforXML,既是一种接口,也是一个软件包采用的是事件驱动,也就是它解析XML文档并需要解析完整个文档,在解析过程中,它会判断解析出的当前字符是否符合XML中的某部分,如果符合则触发事件,如果不符合则触发相应的回调函数。此回调函数封装在ContentHandler接口中。。因为ContentHandler被实现后会被强制实现很多无用方法,故不用此接口,我们继承DefaultHandler类,因为其实现了ContentHandler中一部分我们需要的方法,省去了一些我们无用的方法哦。所以选择用这个。缺点是,如果要使用它去添加或者删除一些内容会比较费劲的。DOMDocumentObjectModel此种解析方式是把已知的XML文档全部载入到内存中,并将其存储为dom树,根据dom结点与子结点之间的关系来解析文件,如果文件过大的话,解析会很耗时而且很耗资源。这里主要说明下SAX解析XML文件的过程:(一)创建事件处理程序(二)创建SAX解析器(三)将事件处理程序分配给解析器(四)对文档进行解析,将每个事件发送给处理程序九、Android学习第/——广播机制与WIFI网络操作今天熟悉了Android中的广播机制与WIFI网络的一些基本操作,总结如下:Android的广播机制我们知道广播机制中,发送方不会关心接收方时候接收到数据或者如何去处理数据。这里总结下Android中BroadcastReceiver的注册方法:(一)在应用程序中进行注册(二)在Manifest.xml中进行注册如果在Manifest.xml中进行注册,那么该应用程序无论是开还是关,该应用都会收到广播事件。例如:监听电池耗电量等。显而易见,这种注册方法并不是我们想要的。如果在应用程序中进行注册,就会在Activity可见时进行注册,不可见时就会取消注册。在Activity中进行注册的代码如下:注册:registerReceiver(BroadcastReceiverreceiver,IntentFilterfilter);取消注册:unregisterReceiver(BroadcastReceiverreceiver);如果一个BroadcastReceiver用于更新UI,那么通常会使用在代码中注册的方法。WIFI基本操作WIFI应该说是Android中比较重要的一块了,用Android系统手机的童鞋们,应该每天都在接触WIFI。今天熟悉了如何对WIFI网卡进行基本的操作,包括打开,关闭,检测网卡状态等等。WIFI网卡的状态是有一系列整型常量来表示的,如下:TOC\o"1-5"\h\z(一)WIFI_STATE_DISABLEDWIFI网卡不可用1(二)WIFI_STATE_DISABLINGWIFI网卡正在关闭0(三)WIFI_STATE_ENABLEDWIFI网卡可用状态——3(四)WIFI_STATE_ENABLINGWIFI网卡正在打开2(五)WIFI_STATE_UNKNOWN未知网卡状态——4大家注意到了,每个状态后我写了一个数字,我们知道这些都是整型常量,所以后面的数字就是这些常量对应的值,如果大家在程序中,输出当前当卡的状态,就会看到这些数值,对应着某种网卡的状态。操作AndroidWIFI网卡状态中,比较重要的是操作WIFI网卡需要的权限,这个有很多。我们在AndroidAPI中可以找到Manifest.permission类,就可以看到各种权限了。这里贴出WIFI的一个例子,WIFI的这个例子只能在真机上面测试,因为模拟器没有WIFI这样的功能。这里比较重要的有三个文件:WIFITestActivity.javamain.xmlManifest.xml下面来看看这三个文件中的具体代码:main.xml<?xmlversion="1.0"encoding="utf-8”?><LinearLayoutxmlns:android="/apk/res/android”android:layout_width="fill_parent”android:layout_height="fill_parent”android:orientation="vertical"><TextViewandroid:layout_width="fill_parent”android:layout_height="wrap_content”android:text="WIFI”/><Buttonandroid:id="@+id/open”android:layout_width="fill_parent”android:layout_height="wrap_content”android:text="打开wifi/><Buttonandroid:id="@+id/close”android:layout_width="fill_parent”android:layout_height="wrap_content”android:text="关闭wifi"/><Buttonandroid:id="@+id/check"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="检查wifi状态”/></LinearLayout>WIFITestActivity.javapackagemickey.wifi;importandroid.app.Activity;importandroid.content.Context;.wifi.WifiManager;importandroid.os.Bundle;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;importandroid.widget.Toast;publicclassWIFITestActivityextendsActivity(//三个控件对象privateButtonopen=null;privateButtonclose=null;privateButtoncheck=null;//我们知道要对网卡进行操作,就需要WifiManager这个类privateWifiManagerwifiManager=null;@OverridepublicvoidonCreate(BundlesavedInstanceState)(super.onCreate(savedInstanceState);setContentView(R.layout.main);//得到控件对象的实例,并且为他们设置相应的监听器open=(Button)findViewById(R.id.open);open.setOnClickListener(newOpenWifiListener());close=(Button)findViewById(R.id.close);close.setOnClickListener(newCloseWifiListener());check=(Button)findViewById(R.id.check);check.setOnClickListener(newCheckWifiListener());}//为打开网卡按钮设置监听器classOpenWifiListenerimplementsOnClickListener(@OverridepublicvoidonClick(Viewarg0)(//内部类如果直接使用this的话代表的是它自己,所以要用WIFITestActivity.this//得到WIFIManager对象wifiManager=(WifiManager)WIFITestActivity.this.getSystemService(Context.WIFI_SERVICE);//setWifiEnabled(true)打开wifi网卡wifiManager.setWifiEnabled(true);//得到当前网卡的状态,这儿输出的是一个整型常量System.out.println("当前网卡的状态为:"+wifiManager.getWifiState());//弹出一个Toast提示用户当前wifi网卡的状态是什么,记得调用show方法Toast.makeText(WIFITestActivity.this,”当前wifi网卡的状态为"+wifiManager.getWifiState(),Toast.LENGTH_SHORT).show();}}//为关闭网卡按钮设置监听器classCloseWifiListenerimplementsOnClickListener(@OverridepublicvoidonClick(Viewarg0)(//得到WIFIManager对象wifiManager=(WifiManager)WIFITestActivity.this.getSystemService(Context.WIFI_SERVICE);//设置网卡不可用wifiManager.setWifiEnabled(false);System.out.println("当前网卡的状态为:"+wifiManager.getWifiState());Toast.makeText(WIFITestActivity.this,”当前wifi网卡的状态为"+wifiManager.getWifiState(),Toast.LENGTH_SHORT).show();}}//为检查网卡状态按钮设置监听器classCheckWifiListenerimplementsOnClickListener(@OverridepublicvoidonClick(Viewarg0)(//得到WIFIManager对象wifiManager=(WifiManager)WIFITestActivity.this.getSystemService(Context.WIFI_SERVICE);System.out.println("当前网卡的状态为:"+wifiManager.getWifiState());Toast.makeText(WIFITestActivity.this,”当前wifi网卡的状态为"+wifiManager.getWifiState(),Toast.LENGTH_SHORT).show();}}}Manifest.xml<?xmlversion="1.0"encoding="utf-8”?><manifestxmlns:android="/apk/res/android"package="mickey.wifi”android:versionCode="1"android:versionName="1.0”><uses-sdkandroid:minSdkVersion="10”/><applicationandroid:icon="@drawable/ic_launcher”android:label="@string/app_name"><activityandroid:label="@string/app_name”android:name=".WIFITestActivity"><intent-filter><actionandroid:name="ent.action.MAIN"/><categoryandroid:name="ent.category.LAUNCHER"/></intent-filter></activity></application><!--这四个权限一定要有,否则系统不会赋予用户操作网络及网卡的权限--><uses-permissionandroid:name="android.permission.CHANGE_NETWORK_STATE"/><uses-permissionandroid:name="android.permission.CHANGE_WIFI_STATE"/><uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/><uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/></manifest>然后童鞋们,把基于Android系统的手机用USB数据线连接到电脑,记得把USB调试打开,然后运行你的程序,就会自动在手机上运行这个程序啦〜十、Android学习第九小结通过这段时间的学习,今晚上来做个小小的总结〜〜〜最早之前我们就了解到,Android四个重要的部分:一、Activity——门面,就是我们看到的用户界面二、Intent——在整个应用程序间传送数据三、Service——不可见,为整个应用程序提供一个服务支持四、ContentProvider为应用程序提供数据的接口至此,这四个重要的部分我们都已经有了初步的认识。但是并不是每一个Android应用程序都需要这四个部分,这不是必需的。某些时候,我们只需要这四种中的几种组合成我们的应用。Activity至此,Activity我们已经很清楚了,需要注意的是Activity的使用,需要在Manifest.xml中进行注册。IntentAndroid中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作、数据、附加数据进行描述,Android则根据这些Intent的描述,负责找到相应的组件,将Intent传递给调用的组件,并完成对组件的调用。Intent不仅可用于应用程序之间,也可用于应用程序内部的Activity/Service之间的交互。因此,Intent在这里起的是一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。理解Intent的关键之一是理解Intent的两种基本用法:1、显式的Intent即在构造Intent对象的时候就指定接受者2、隐式的Intent一在构造Intent对象时,并不知道也并不关心接受者是谁,有利于降低发送者与接受者之间的耦合。以下是Intent几种常用的用法:IntentintentOne=newIntent(IntentActivity.this,ResultActivity.class);IntentActivity.this.startActivity(intentOne);IntentintentTwo=newIntent(IntentActivity.this,ResultActivity.class);//把数据放到Bundle中,进行传递Bundlebundle=newBundle();bundle.putString("name”,"chenzheng");//intent.putExtra可以用来放键值对intentTwo.putExtras(bundle);IntentActivity.this.startActivity(intentTwo);—//对于数据接收BundleresultBundle=getIntent().getExtras();Stringname=resultBundle.getString("name");IntentresultIntent=getIntent();BundleresultBundleTwo=newBundle();resultBundleTwo.putString("name","ThisisfromShowMsg");resultIntent.putExtras(resultBundleTwo);setResult(RESULT_OK,resultIntent);ServiceService是一个应用程序组件Service没有图形化界面Service通常用来处理一些耗时比较长的操作,例如下载,播放MP3文件等操作。可以使用Service更新ContentProvider,发送Intent以及启动系统通知等等。我们要注意,Service不是一个单独的进程,也不是一个线程。这里别忘记写完一个Service要去Manifest.xml中进行注册。ContentProvider应用程序能够将它们的数据保存到文件中、SQL数据库中、甚至是任何有效的设备中。当你想将你的数据与其他应用共享时,ContentProvider就将变的很有用了。一个ContentProvider类实现了一组标准的方法,从而能够将其他的应用保存或者读取此ContentProvider处理的各种数据类型。Toast俺一直对这个Toast很有兴趣,所以从网上找了个例子自己练习了下,与大家分享:下面的例子一共有五种Toast的用法第一种:默认样式//默认的Toast样式Toast.makeText(ToastActivity.this,”默认Toast样式”,Toast.LENGTH_SHORT).show();运行结果如下:莹■±53Tna^tTest113DToast买例戳认样式月定义M示位萱样式带图片样式完全旨定义样式其他线程祥式我认To第甘学式第二种:自定义显示位置//自定义位置的ToastToasttoast=Toast.makeText(ToastActivity.this,"自定义位置的Toast",Toast.LENGTH_LONG);//自定义Toast的显示位置toast.setGravity

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论