版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、中软短训学习笔记-Android手机开发1、 环境的搭建1. 需要的软件a. JDKb. Eclipsec. Android adtd. 备注2. 配置步骤详见中软短训笔记附环境搭建说明、 认识工程1. 工程文件布局如下 2. 简单解释如图左边是子文件夹未打开的情况右边的时显示子文件夹的情况:其中src文件夹下的包中的文件为主文件,当然如果是多个主文件这些文件也是有不同的优先级的。要说明的是建立的工程的时候所要求填写的包明必须是双层的如上图中的com.basic.系统的自动生成的gen文件夹中有和src文件夹下一样的包。这是系统的预先定义好的。接下来是android的类库文件夹。再接下来的as
2、sets文件夹我们目前还没有接触到。而接下来的res文件夹里面存放的是与界面有关的资源。其中drawablexxx文件夹中存放的是适合于不同分辨率手机的界面墙纸。倒数第三个文件是一个界面配置文件。3. 备注、 理清关系1. 常用文件常用的类文件主要有:界面类文件(是程序的入口,也是主要编写代码的地方),R类,main.xml文件。Android的类文件中所有的界面类都必须继承于activity类,否则会出错。而所有的后台类都必须继承于service类。R类是一个资源的标识类。在这个类中它会将你所有的组件利用一定的标识进行内存的编号存放在你要访问的地方只需要通过特定的标识来访问即可。这样使得资源
3、易于管理和调用。Main.xml类是一个管理界面布局和定义组件属性的类。它负责对所有的组件进行属性的初始化和组件布局的工作。2. 一些常用文件间的关系首先当你在main.xml类中每新建一个组件,系统就会在R类中自动为你所新建的组件进行资源的标识。当然你需要在新建资源的时候告诉系统标识资源的方式:比如说id等。当R类中的资源标识完成后。我们就可以在继承于activity类的界面类中利用像id等的资源标识来访问资源了。而当我们新建了一个继承于activity类的界面类时。我们需要在androidmainfest.xml文件中对刚刚我们新建的类进行相应的配置。3. 备注、 备注中软短训学习笔记an
4、droid手机开发2实现简单的音乐播放控制、 思路利用给按钮添加添加事件监听的方法来控制音乐的播放或其他动作,需要说明的是再事件的处理中都是通过调用系统库里面的方法来实现想要的功能.、 主要源代码A 界面类继承于activity的类 public void onCreate(Bundle savedInstanceState) Log.e(oncreate, call onCreate().);super.onCreate(savedInstanceState);setContentView(R.layout.main);/* 获取组件对象 */gobutton = (Button) find
5、ViewById(R.id.buttonok);stopbutton = (Button) findViewById(R.id.Buttonstop);pausebutton = (Button) findViewById(R.id.Buttonpause);intentbutton = (Button) findViewById(R.id.Buttonintent);/* 给组件添加事件监听器 */gobutton.setOnClickListener(new button1adpter();stopbutton.setOnClickListener(new stoplistener();p
6、ausebutton.setOnClickListener(new pauselistener();intentbutton.setOnClickListener(new intentlistener();myplayer = new MediaPlayer();/* * 这是一个媒体对象 对音乐的控制都要借助于此对象来完成 */上面所示的方法是一个系统在创建当前类时自动创建的一个方法。从方法名和方法体可以看出他是一个类似于构造方法的方法。用于初始化界面和界面上的组件,以及给组件添加事件监听。B R类public static final class id public static fina
7、l int Buttonintent=0x7f050003; public static final int Buttonpause=0x7f050002; public static final int Buttonstop=0x7f050001; public static final int buttonok=0x7f050000;以上是R类的一个内部类,可以看到在这个内部类中系统为我们定义的四个按钮做了唯一的资源标识。而在上一个代码片段中也可以看到我们获取资源-也就是访问按钮的时候也是利用这个内部类通过id这个标识来访问的。C Main.xml类可以看到,这个类中的代码类似于一种标记语
8、言。这个类是资源最原始的创建的地方,只有从这个地方添加成功,才能在以后的成粗中正常使用所定义的组件。从以上每个定义过程中我们知道,标签名定义了组件的类型,组件的属性也被定义在标签的属性中。标签名于属性之间要有空格,不同的属性之间也要有空格。其中类似于android:id=+id/Buttonintent这个属性中的表示在R类的id类中添加一个资源的标识,后面的buttonintent则是标识符。Android:text属性定义按钮组件上显示的文本内容。后面的两个属性定义按钮的高和宽。D Androidmainfest.xml类前一个activity标签之间的内容是在建立工程的时候系统自动生成的
9、代码,它的作用是用来标识和点位主界面的,为了让系统知道一开始显示哪个界面或者说系统的从那里开始显示。而第二个activity标签中的内容是再我们自己建立到了另一个activity类之后的配置要用的代码。第一个属性标识界面。第二个属性定义界面的显示方式,以上代码中的界面是以对话框的形式显现的。也即是说当我们每新建一个activity类的时候都需要到这个文件中来对此进行配置处理,一边让系统精确的定位该资源。E 备注、 涉及技术要点1. 借助于media类实现对音乐的简单控制Android的开发和java的开发有很大相似点,有很多的东西是系统的类库预先定义好的在需要实现某些功能的时候我们借助系统类库
10、的类是很容易的。在此次简单的音乐播放器中对音乐控制的实现也是借助android系统的media类的。在我们定义好我们需要的按钮以及对没个按钮添加了相应的事件监听之后在事件处理的时候加上media类的一些方法就可以了。Media的主要方法有setDataSource();prepare();start();pause();stop();等其中需要说明的是在setDataSource方法中需要利用try catch语句来检测语句应为改语句有可能抛出异常。还有就是注意改方法参数的书写格式。SetDataSourece(“/sdcard/xx.mp3”);2. 利用intent意图类实现界面的转向也就
11、是界面之间的互换Intent意图类是实现界面的转向所能够用到的类。它的作用是将界面从当前界面转到另一个定义好的界面上去,在转向另一个界面时既可以使当前的界面完全不可见也可以使当前的界面可见而使要转向的界面以对话框的形式显示。Intent类的实例化 Intent it=new Intent(cureentactivity.this,targetactivity.class);方法中的第一个参数代表当前activity类的当前对象第二个参数代表要转向的activity类的一个对象,改对象由系统进行实例化工作。3. 备注、 备注中软短训学习笔记android手机开发3实现简单的后台音乐播放控制、 思
12、路借助service类实现音乐的后台播放。实现过程:创建service-捕获service-绑定service-利用service-释放(销毁)service、 主要源代码1. activity类代码片段一public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.main);crebutton = (Button) findViewById(R.id.Buttoncreate);desbutton = (Button) findViewBy
13、Id(R.id.Buttondestroy);bindbutton = (Button) findViewById(R.id.Buttonbind);unbindbutton = (Button) findViewById(R.id.Buttonubind);playbutton = (Button) findViewById(R.id.Buttongo);pausebutton = (Button) findViewById(R.id.Buttonpause);stopbutton = (Button) findViewById(R.id.Buttonstop);/* 以上代码通过R类中的资
14、源定位找到相应的按钮资源 */crebutton.setOnClickListener(new createlistener();desbutton.setOnClickListener(new deslistener();bindbutton.setOnClickListener(new bindlistener();unbindbutton.setOnClickListener(new unbindlistener();playbutton.setOnClickListener(new playlistener();pausebutton.setOnClickListener(new pa
15、uselistener();stopbutton.setOnClickListener(new stoplistener();/* 给定位好的每一个按钮添加事件监听 */代码片段二class bindlistener implements OnClickListener /* service绑定事件监听器 */Overridepublic void onClick(View v) / TODO Auto-generated method stubIntent it = new Intent(serviceActivity.this, ServiceSurface.class);/* 定义意图类
16、 */bindService(it, conn, Context.BIND_AUTO_CREATE);/* * 调用bindService系统方法实现对service对象的绑定 * 其中第一个参数是一个意图类的对象代表绑定service后所要转向的界面, * 第二个参数是一个由继承于系统ServiceConnection 类的对象 该对象获得一个当前Activity类的service对象 * 第三个参数是一个绑定方式的参数,调用系统参数实现自动绑定 */class MyServiceConnection implements ServiceConnection Overridepublic v
17、oid onServiceConnected(ComponentName name, IBinder service) / TODO Auto-generated method stubServiceSurface.bind ss = (ServiceSurface.bind) service;/* * 创建ss为ServiceSurface . bind类型的一个实例对象 并将service参数强制转换后赋值给ss对象 * * IBinder是一个接口类可继承于Binder 而ServiceSurface.bind也继承于Binder */sservice = ss.makebind();/
18、* * 利用创建好的ss对象来实现对makebind方法的调用以获取service对象* * sservice对象在创建时自动执行了系统默认的onBind方法,而onBind方法返回的是一个 * ServiceSurface.bind类的对象 * 最终由ServiceSurface.bind对象来调用自定义的makebind方法来 * 将或取到的service对象赋值给sservice(sservice对象 继承系统的Serviece而来) */Log.e(bind service, service + );/* 标记方法调用成功 */Overridepublic void onService
19、Disconnected(ComponentName name) / TODO Auto-generated method stub2. service类public IBinder onBind(Intent arg0) return new bind();/* * 实例化一个bind类对象 以此来获取当前service对象 当ServiceSurface对象创建时自动调用onBind方法 */public class bind extends Binder /* 定义公共内部类 */public ServiceSurface makebind() /* 定义内部类的方法来返回当前的serv
20、ice对象 */return ServiceSurface.this;3. R类public static final class id public static final int Buttonbind=0x7f050002; public static final int Buttoncreate=0x7f050000; public static final int Buttondestroy=0x7f050001; public static final int Buttongo=0x7f050004; public static final int Buttonpause=0x7f
21、050005; public static final int Buttonstop=0x7f050006; public static final int Buttonubind=0x7f050003; 4. Main.xml类此类存在有大量的定义button的代码。5. Androidservicemainfest.xml类 、 涉及技术要点1. 主类文件的创建在利用的service的程序中,是从activity类文件借助intent意图类转向service的类中去的。所以我们不仅要建立一个继承于activity类的界面类文件还需要建立一个继承于service类的service类文件。并且
22、在建立好两个文件后需要在androidservicemainfest.xml文件中对这两个文件进行配置。在上面的androidservicemainfest.xml文件中我们可以看到位于一对activity标签内的内容是对activity界面类的配置。而位于一对service标签内的则是对service类的配置信息。2. service的创建在继承于service类的类文件中我们可以看到我们在创建service对象的时候重写了onBind方法。将它的返回值更改为一个自定义的类的对象。在代码中我们可以的看到自定义的方法也是继承了Binder类。并且我们在这个自定义的方法中也自定义了一个用以获取当
23、前service类对象的方法。在后边的绑定service时,我们便可以调用此方法来获取当前的service对象。需要说明的是类似于activity类自行创建的service类也必须继承于系统的service类。3. service的绑定service的绑定在自定义的activity类中实现。为了实现service的绑定我们在activity类中继承于ServiceConnection类创建了MyServiceConnection类。由此类生成的对象便是一个service的绑定对象。同时我们还借助了intent意图类和系统的bindService方法并且最终由bindService()方法完成最
24、终的service绑定工作。4. 备注、 备注中软短训学习笔记浅识C+1、 统计字符串字符串数组的长度1. 代码:#include #include int getlength(char* src)int i=0;char* p=src;/for(;srci!=0;i+);/for(;*src;i+,src+);/* src代表数据值对应的地址值,而*src代表地址对应的数据值 * 利用地址值的+ 来实现对应值的跳转*/while(*src+);/return i;return src-p-1;int main(int argc, char *argv)char* str=Hello Worl
25、d;int length=getlength(str);printf(%dn,length);return 0;2. 解释a 第一个for循环为最初版本利用srci数组直接判断数组里对应的字符是否为0b 第二个for循环为第一次改进版。利用*src代表的数组的值来判断值是否为空。c 代码中未注释掉的while循环则为第二次改进版,利用while的循环条件来判断数组的值是否为空。d 在while循环中的return语句中利用在数组头和数组尾放置的指针作差减一来计算出字符串的长度。3. 要点a 在第一个for循环中需要了解可以利用指针变量加数组下标来以数组的方式访问指针所指向的值。b 在第二个循环
26、中需要掌握src代表一个数值的地址值,则*src代表地址所对应的数值。并且需要明白字符0于数值0以及NULL三者是等价的。基于此可以在while循环的条件中直接利用*src+,在此需要注意的是while开始循环时先判断*src所代表的数值是否为0,在以上条件成立的情况下在执行src+。所以*src+需要理解成if(*src);src+;4. 备注2、 字符串拷贝1. 代码#include #include void copystring(char* tar,char* src)int i;/*for(i=0;str2i!=0;i+)tari=srci;tari=0;*/while(*tar+=
27、*src+);int main(int argc, char *argv)char* src=Hello World;char tar20;copystring(tar,src);printf(%sn,tar);return 0;2. 解释以上代码段也是基于对类似于指针类型的src以及*src和*src+的理解所编写的。可以看到代码中有注释掉的for循环语句是代码的最初版本,基本思路即使利用字符逐个赋值的方式来最终完成整个字符串的复制。利用for循环完成字符串复制后还要再手动加上0。3. 要点理解利用while循环来完成字符串的复制工作。在while的循环条件中可以看到*tar+=*src+;
28、此句代码需要理解成if(*src);*tar=*src;tar+;src+;赋值表达式返回变量被赋值后的值,所以if先判断变量要赋的值是否为真,在判断赋值后的值是否为真,最后执行+。4. 备注3、 字符出现次数的统计1. 代码#include #include int main(int argc, char *argv)int number128=0;char* src=Hello &* World123 ($# $;for(;*src;src+)number*src+;for(int i=0;i128;i+)if(numberi)printf(%c appeared %d time(s)n,
29、i,numberi);return 0;2. 解释根据ASCII码的特点。程序利用一个大小为128的int型的数组来存放可能出现的128个不同的字符。然后利用数组遍历访问数组中的每个元素,在此过程中再一次利用ASCII码的码值特性将字符在数组中对应位置的值+;3. 要点要明白更具ASCII码的编码规则,其字符的结果可能出现128中不同的字符。在ASCII码的编码规则下,要弄懂每一个字符都有一个在0128之间的一个整数与其相对应。这是这个程序的核心。而在打印的过程中,针对同一个ASCII码的码值利用不同的输出方式可以打印出字符和数值不同的形态。4、 字符串倒置1. 代码#include #inc
30、lude void reversestring(char *src,int start,int end)char a;while(startend)a=srcstart;srcstart=srcend;srcend=a;start+;end-;int main(int argc, char *argv)char src=Hello World;reversestring(src,0,4);printf(%sn,src);return 0;2. 分析程序中分别利用start和end两个下标标记来定位两个需要交换的数据。每完成一次交换start+;end-;通过以上操作使得start和end所标记
31、的位置逐渐向中间靠拢。重复上述过程直至所有交换完成。交换完成条件由start 自行编写#include #include void reversestring(char *src,int start,int end)char a;while(start 老师代码#include #include void reversestirng(char*src,int start,int end) char temp; while(startend) temp=srcend; srcend=srcstart; srcstart=temp; start+; end-; void reversewords(
32、char*src)char* p1=src;char* p2=src;while(true)if(*p2= |*p2=0) reversestring(src,p1-src,p2-src-1);if(*p2=0)return ;while(*p2= )p2+;p1=p2;elsep2+;int main(int argc, char *argv) char s1=I Have A Dream; reversestirng(s1,0,strlen(s1)-1);reversewords(s1);printf(s1);return 0;2. 分析7、 字符串数字向整型数字转换1. 代码#inclu
33、de #include int strtoint(char* num *=10; src)int num=0;while(*src)num +=*src-0;src+;return num;int main(int argc, char *argv)char* str=1245;printf(%dn,strtoint(str);return 0;2. 分析8、 数字向字符串的转换1. 代码2. 分析9、 数据结构1. 代码#includeclass ListNodefriend class List;private:int data;ListNode* next;public:ListNode(int d) : data(d), next(NULL);class Listprivate:ListNode* head;public:List() : head(NULL)List()ListNode* current = head;while(current)head = current-next;delete cur
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电力新能源技术专员技术推广考试题目及答案
- Bn-PEG8-OBn-生命科学试剂-MCE
- 无轨电车架线工变更管理评优考核试卷含答案
- 绕组线漆包工岗前工作技巧考核试卷含答案
- 燃气具零部件制作工安全知识竞赛水平考核试卷含答案
- 信息系统适配验证师安全行为知识考核试卷含答案
- 2026年电子游戏开发与用户体验设计题目集
- 信号设备组调工操作技能模拟考核试卷含答案
- 催化汽油吸附脱硫装置操作工风险识别水平考核试卷含答案
- 印前处理和制作员冲突管理能力考核试卷含答案
- TSG Z6002-2026 特种设备焊接操作人员考核细则
- 2025年上交所招聘笔试题目及答案
- GB/T 5153-2003变形镁及镁合金牌号和化学成分
- GB/T 4357-2022冷拉碳素弹簧钢丝
- GB/T 21389-2008游标、带表和数显卡尺
- GB/T 19326-2012锻制承插焊、螺纹和对焊支管座
- GB/T 10156-2009水准仪
- 隧道施工开挖台车验收表
- 【用友U9培训】成本核算课件
- 重庆青阳药业有限公司涉嫌滥用场支配地位拒绝交易案
- HiSec安全解决方案技术白皮书
评论
0/150
提交评论