当前位置: 网学 > 编程文档 > Android > 正文

Android开发简单教程

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: myeducs.cn 发布时间: 13/03/17

【网学网提醒】:网学会员鉴于大家对十分关注,论文会员在此为大家搜集整理了“Android开发简单教程”一文,供大家参考学习


    echo2600(网学)贡献
    
    目录介绍
    环境搭建
    AndroidSDK安装
    安装AVD创建
    ADT
    目录结构以Android项目的创建目录结构以及各文件作用
    AndroidAndroid
    项目创建目录结构及文件作用
    Android应用解析
    Android资源文件解析Android主程序解析
    Android生命周期Android调用webservice
    1.环境搭建
    在已经安装jdk并且有eclipse前提下安装AndroidSDK和ADT
    AndroidSDK安装:
    1.首先下载SDK文件(有以下几个下载地址).Windows版dl.google/android/android-sdk_r06-windows.zipLinux版dl.google/android/android-sdk_r06-linux_86.tgzMac版dl.google/android/android-sdk_r06-mac_86.zip2.解压文件,运行里面的“SDKManager.exe”.解压文件,运行里面的“”
    如果你遇到了消息为“Failed如果你遇到了消息为“FailedtofetchURL…”的错误提示
    1)在“AndroidSDKandAVDManager”窗口的左侧选择“Settings”2)选中“Forcehttps://…”这个选项
    3)点击“SaveandApply”并重新运行SDKSetup.exe3.选择你要安装的API版本、驱动、文档.版本、驱动、
    1)如果你只要尝试一下Android2.1Emulator那么你只选择“SDKPlatformAndroid2.1.API7,revision1”来安装就可以了2)如果你要在此SDK上开发应用程序和游戏应用,那么你需要接受并遵守所有许可内容(AcceptAll)3)点击“InstallSelected”4.然后就是等待安装程序下载选择的包来安装.“InstallingArchives”窗口
    ADT安装:
    1.打开eclipse.Software”2.点击Add……按钮,弹出对话框输入Name和Location,.按钮,按钮,Location输入:https://dl-ssl.google/android/eclipse/输入:IDE,进入菜单中的“Help”->”InstallNew进入菜单中的“进入菜单中的”
    如果不好用就改为dl-ssl.google/android/eclipse/3.确定返回后,在workwith后的下拉列表中选择我们刚才添加.确定返回后,的ADT,我们会看到下面出有DeveloprTools,展开它会有AndroidDDMS和AndroidDevelopmentTool,勾选他们,然,勾选他们,后按照提示一步一步next
    完成之后:完成之后:1)选择Window>Preferences……2)在左侧面板选择Android,然后在右侧点击Browse…并选中SDK路径3)点击Apply。OK配置完成
    创建:AVD创建:
    应用程序可以在模拟器上运行,为使Android应用程序可以在模拟器上运行,必须创建AVD1)在Eclipse中,选择Window>AndroidSDKandAVD
    Manager2)点击左侧面板的VirtualDevices,再点击右
    侧的New输入一
    个AVD名称,选择一个Target,输入模拟的SDCard的容量大小,选择一个外观皮肤Skin,点击CreateAVD的创建3)运行新建的模拟器AVD即可完成
    a.在列表里选择新建的要运行的模拟器(VirtualDevice)b.单击“Start…”c.单击“Launch”
    注意:注意:如果点击左侧面板的VirtualDevices,再点击右侧的New,而target下拉列表没有可选项时,点击面板左侧的AvailablePackages,在右侧勾选https://dl-ssl.google/android/repository/repository.xml
    然后点击InstallSelected按钮,然后按照提示做就行了
    2.Android项目的创建目录结构及各文件作用
    项目创建:Android项目创建:
    打开file—new--AndroidProject
    BuildTarget:选择sdk的版本Applicationname:一个易读的标题在你的应用程序上Packagename:包名,遵循Java规范,用包名来区分不同的类是很重要的CreateActivity:项目的主类名,这个类将会是Android的Activity类的子类。一个Activity类是一个简单的启动程序和控制程序的类。它可以根据需要创建界面,但不是必须的
    目录结构及文件作用:Android目录结构及文件作用:
    1.Android目录结构.
    src目录—-存放源代码文件gen目录—-ADT插件生成的文件,一般不作修改assets目录—-存放资源文件目录,不会在R.java中生成IDres目录—-存放资源文件目录,这里面的每个文件AndroidManifest.xml整个应用程序配置文件,存储一些包名版本号程序图标程序标签default.properties检查版本文件,自动生成,不能修改(修改将被删除)
    2.重点目录及文件.res/drawable-xxxx是存放图片的目录drawable-hdpi存放高分辨率版本drawable-ldpi存放中分辨率版本drawable-mdpi存放低分辨率版本
    res/layout目录存放布局文件(xml文件),每个Activity对应一个XML文件res/value目录存放存储值文件(xml文件)R.java文件drawable类给图片生产的IDlayout类给布局文件生成的IDstring类给string.xml里面键值对生成的ID
    main.xml控制Activity中控件的位置,每个Activity对应一个此布局文件string.xml存放键值对,一般用在程序的多语言版本的切换(多个文件,键一样,值不同)
    在项目上右键runas>AndroidApplication程序就运行了
    3.Android应用解析
    资源文件解析:资源文件解析:
    样例,AndroidManifest.xml样例,代码如下
    
    
    
    AndroidManifest.xml解析
    manifest根节点,描述了package中所有的内容包含命名空间的声明。xmlns:android=schemas.xmlns:androidandroid/apk/res/android,使得Android中各种标准属性能在文件中使用,提供了大部分元素中的数据声明应用程序
    Package
    application
    android:iconandroid:label
    Activity
    android:nameandroid:label
    intent-filter
    actioncategory
    uses-permission
    uses-sdk
    包含package中application级别组件声明的根节点。此元素也可包application的一些全局和默认的属性,如标签、icon、主题、必要的权限,等等。一个manifest能包含零个或一个此元素(不能大于一个)应用程序图标应用程序名字用来与用户交互的主要工具。Activity是用户打开一个应用程序的初始页面,大部分被使用到的其他页面也由不同activity所实现,并声明在另外的activity标记中。注意,每一个activity必须有一个标记对应,无论它给外部使用或是只用于自己的package中。如果一个activity没有对应的标记,你将不能运行它。另外,为了支持运行时查找Activity,可包含一个或多个元素来描述activity所支持的操作这个activity对应的类别这个activity的代号声明了指定的一组组件支持的Intent值,从而形成了IntentFilter。除了能在此元素下指定不同类型的值,属性也能放在这里来描述一个操作所需的唯一的标签、icon和其他信息组件支持的Intentaction组件支持的IntentCategory。这里指定了应用程序默认启动的activity应用需要的权限应当在此处申请,所申请的权限应当被系统或某个应用所定义,否则视为无效申请。同时,使用权限的申请需要遵循权限授予条件,非platform认证的应用无法申请高级权限。该应用程序所使用的sdk版本相关
    Strings.xml解析
    HelloWorld,AndroidTMS!AndroidTMS
    这个文件很简单,就定义了两个字符串资源,R.java中对应的索引,与
    publicstaticfinalclassstring{publicstaticfinalintapp_name=0x7f040001;publicstaticfinalinthello=0x7f040000;}
    String资源的使用
    Resourcesr=this.getContext().getResources();Stringappname=((String)r.getString(R.string.app_name));
    Stringhello=((String)r.getString(R.string.hello));
    AndroidManifest.xml中调用
    项目的布局文件layout中资源文件的解析
    main.xml
    
        android:layout_marginRight="10dip"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="30dip">
    与R.java中对应的索引
    publicstaticfinalclassdrawable{publicstaticfinalinticon=0x7f020000;}publicstaticfinalclassid{publicstaticfinalintbtnExit=0x7f050002;publicstaticfinalintdataInfo=0x7f050001;publicstaticfinalintusername_view=0x7f050000;}publicstaticfinalclasslayout{publicstaticfinalintmain=0x7f030000;}
    layout布局文件的加载
    setContentView(R.layout.user_info);setContentView(R.layout.user_info);user_info
    layout布局文件中按钮的调用
    Buttonbtn=(Button)findViewById(R.id.btnExit);
    按钮的监听事件,当用户点击按钮的时候询问用户是否要退出改程序,如果选择是,退出程序,选择否不执行任何操作
    btn.setOnClickListener(newOnClickListener(){publicvoidonClick(Viewv){AlertDialogdlg=newAlertDialog.Builder(ArtistsActivity.this).setTitle("LoginExit").setMessage("您要退出程序??").setPositiveButton("确定",newDialogInterface.OnClickListener(){publicvoidonClick(DialogInterfacedialog,intwhichButton){finish();}
    }).setNegativeButton("取消",newDialogInterface.OnClickListener(){publicvoidonClick(DialogInterfacedialog,intwhichButton){
    }}).create();dlg.show();
    }});
    程序解析:程序解析:
    publicclassAndroidTMSextendsActivity{/**Calledwhentheactivityisfirstcreated.*/publicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);TextViewtv=(TextView)findViewById(R.id.dataInfo);TelephonyManagertm=(TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);Stringimei=tm.getSimSerialNumber();tv.setText(imei+”sim卡号”);Buttonbtn=(Button)findViewById(R.id.btnExit);btn.setOnClickListener(newOnClickListener(){publicvoidonClick(Viewv){AlertDialogdlg=newAlertDialog.Builder(ArtistsActivity.this).setTitle("LoginExit").setMessage("您要退出程序??").setPositiveButton("确定",newDialogInterface.OnClickListener(){publicvoidonClick(DialogInterfacedialog,intwhichButton){
    finish();}}).setNegativeButton("取消",newDialogInterface.OnClickListener(){publicvoidonClick(DialogInterfacedialog,intwhichButton){
    }}).create();dlg.show();
    }});}}
    主程序AndroidTMS类继承自TabActivity类,重写了voidonCreate(BundlesavedInstanceState)方法。在onCreate方法中通setContentView(R.layout.main)设置了Activity要显示的布局文件(\layout\main.xml)。程序中的Stringimei=tm.getSimSerialNumber();是读取SIM卡序列号,需要有权限,所以在Androidmani.xml中加入了权限
    4.Android生
    命周期
    activity是单独的,用于处理用户操作。几乎所有的activity都要和用户打交道,所以activity类创建了一个窗口,可以通过setContentView(View)接口把UI放到activity创建的窗口上,当activity指向全屏窗口时,也可以用其他方式实现:作为漂浮窗口(通过windowIsFloating的主题集合),或者嵌入到其他的activity(使用ActivityGroup)。大部分的Activity子类都需要实现以下两个接口:onCreate(Bundle)接口是初始化activity的地方.在这儿通常可以调用setContentView(int)设置在资源文件中定义的UI,使用findViewById(int)可以获得UI中定义的窗口.onPause()接口是使用者准备离开activity的地方,在这儿,任何的修改都应该被提交(通常用于ContentProvider保存数据).为了能够使用Context.startActivity(),所有的activity类都必须在AndroidManifest.xml文件中定义有相关的“activity”项。activity类是Android应用生命周期的重要部分。前台的生命周期,从onResume()开始到onPause()结束。在这段时间里,该Activity处于所有Activity的最前面,和用户进行交互。Activity可以经常性地在resumed和paused状态之间切换,例如:
    当设备准备休眠时,当一个Activity处理结果被分发时,当一个新的Intent被分发时。所以在这些接口方法中的代码应该属于非常轻量级的。Activity的整个生命周期都定义在下面的接口方法中,所有方法都可以被重载。所有的Activity都需要实现onCreate(Bundle)去初始化设置,大部分Activity需要实现onPause()去提交更改过的数据,当前大部分的Activity也需要实现onFreeze()接口,以便恢复在onCreate(Bundle)里面设置的状态。在系统中的Activity被一个Activity栈所管理。当一个新的Activity启动时,将被放置到栈顶,成为运行中的Activity,前一个Activity保留在栈中,不再放到前台,直到新的Activity退出为止。Activity有四种本质区别的状态:在屏幕的前台(Activity栈顶)叫做活动状态或者运行状态,(activeorrunning)如果一个Activity失去焦点,但是依然可见(一个新的非全屏的Activity或者一个透明的Activity被放置在栈顶),叫做暂停状态(Paused)。一个暂停状态的Activity依然保持活力(保持所有的状态,成员信息,和窗口管理器保持连接),但是在系统内存极端低下的时候将被杀掉。如果一个Activity被另外的Activity完全覆盖掉,叫做停止状态(Stopped)。它依然保持所有状态和成员信息,但是它不再可见,所以它的窗口被隐藏,当系统内存需要被用在其他地方的时候,
    Stopped的Activity将被杀掉。如果一个Activity是Paused或者Stopped状态,系
    统可以将该Activity从内存中删除,Android系统采用两种方式进行删除,要么要求该Activity结束,要么直接杀掉它的进程。当该Activity再次显示给用户时,它必须重新开始和重置前面的状态。下面的图显示了Activity的重要状态转换,矩形框表明Activity在状态转换之间的回调接口,可以重载实现以便执行相关代码,带有颜色的椭圆形表明Activity所处的状态。
    Activity生命周期
    activity生命周期,lifecycle在下图中可以看出,Activity有三个关键的循环:整个的生命周期,从onCreate(Bundle)开始到onDestroy()结束。Activity在onCreate()设置所有的“全局”状态,在onDestory()释放所有的资源。例如:某个Activity有一个在后台运行的线程,用于从网络下载数据,则该Activity可以在onCreate()中创建线程,在onDestory()中停止线程。可见的生命周期,从onStart()开始到onStop()结束。在这段时间,可以看到Activity在屏幕上,尽管有可能不在前台,不能和用户交互。在这两个接口之间,需要保持显示给用户的UI数据和资源等,例如:可以在onStart中注册一个IntentReceiver来监听数据变化导致UI的变动,当不再需要显示时候,可以在onStop()中注销它。
    onStart(),onStop()onStop()都可以被多次调用,因为Activity随时可以在可见和隐藏之间转换。可见和隐藏之间转换
    5.Android调用webservice
    android利用ksoap2方式连接webservice,需要导入ksoap2-android-assembly-2.4-jar-with-dependencies.jar包。
    Webservice接口:221.2.165.109:108/Service.asmx(在
    android当中,不能写localhost,必须写清楚PC机当前的网络IP)
    引入ksoap2中以封装好的类
    importorg.ksoap2.SoapEnvelope;importorg.ksoap2.serialization.SoapObject;importorg.ksoap2.serialization.SoapSerializationEnvelope;importorg.ksoap2.transport.AndroidHttpTransport;
    在类中定义webservice的接口地址以及解析方式并且定义要调用的webservice中的函数privatestaticfinalStringserviceURL="221.2.165.109:108/Service.asmx";privatestaticfinalStringnameSpace="tempuri.org/";privatestaticfinalStringmethodName="getDataSet";StringsoapAction="tempuri.org/getDataSet";接下来开始做对webservice请求数据的工作,请求webservice函数以及封装要用的2个参数(master_no,goodState)SoapObjectrequest=newSoapObject(nameSpace,methodName);request.addProperty("master_no","");request.addProperty("goodState","0");之后我们给定义发送数据的信封的封装格式,发送请求SoapSerializationEnvelopeenvelope=new
    SoapSerializationEnvelope(SoapEnvelope.VER11);envelope.bodyOut=request;envelope.dotNet=truetrue;AndroidHttpTransportht=newAndroidHttpTrans
    port(serviceURL);ht.debug=truetrue;ht.call(soapAction,envelope);获取返回数据SoapObjectso=(SoapObject)envelope.getResponse();将得到的so转换成String类型数据StringreturnData=so.toString();ReturnData输出为
    anyType{schema=anyType{element=anyType{complexType=anyType{choice=anyType{element=anyType{complexType=anyType{sequence=anyType{element=anyType{};element=anyType{};};};};};};};};diffgram=anyType{NewDataSet=anyType{Table=anyType{B_GOODS_READY=0;MASTER_NO=WDFCGBT140000123;};Table=anyType{B_GOODS_READY=0;MASTER_NO=WDFCGBT140000128;};Table=anyType{B_GOODS_READY=0;MASTER_NO=WDFCGBT140000188;};Table=anyType{B_GOODS_READY=0;MASTER_NO=WDFCGBT140000528;};Table=anyType{B_GOODS_READY=0;MASTER_NO=140900785863;};Table=anyType{B_GOODS_READY=0;MASTER_NO=140900885826;};Table=anyType{B_GOODS_READY=0;MASTER_NO=140900985823;};Table=anyType{B_GOODS_READY=0;MASTER_NO=140900985829;};Table=anyType{B_GOODS_READY=0;MASTER_NO=WDFCGBT150000128;};Table=anyType{B_GOODS_READY=0;MASTER_NO=WDFCGBT150000129;};};};}
    处理一下ReturnDataPatternpattern=Patternpile("Table=anyType\\{[^}]*\\};");
    Matchermatcher=pattern.matcher(src);Stringitem="";while(matcher.find()){whileSystem.out.println(matcher.group());
    Stringstr=matcher.group().replace("Table=anyType{","").replace("","").replace("};","").replace("}","");String[]strlen=str.split(";");if(strlen.length>1){ifStringfir=strlen[0].split("=")[1];Stringsec=strlen[1].split("=")[1];item+=fir+"-"+sec+";";}elseelse{elseStringtempStr=str.split(";")[0].split("=")[1];item+=tempStr+";";}
    }输出为
    0-WDFCGBT140000123;0-WDFCGBT140000128;0-WDFCGBT140000188;0-WDFCGBT140000528;0-140900785863;0-140900885826;0-140900985823;0-140900985829;0-WDFCGBT150000128;0-WDFCGBT150000129;
    项目中添加第三方jar方法:
    右击项目名选择BuildPath–>ConfigureBuildPath..->Libraries->Add
    ExternalJARS..(选择要加人的jar包)–>OrderandExport选中刚才导入的jar包,然后点击OK,这样的话jar包会一起打包到apk里面
    1
    
  • 下一篇资讯: android开发相关网站链接
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号